diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index a8ff588b79080..007fa5b67a6fa 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index abd046bcf69ae..9e58f3b8d8535 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index 1723ebd4ec7d8..c45287e0b0658 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index 8d6fc993bda14..73450a7f78f8c 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: 2024-05-24 +date: 2024-05-27 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 eeca7cd5e0d62..fda6ef4f66870 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 9114300725d2b..a7527141ff849 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index 11cc1236055e8..f815b118d4a1d 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/asset_manager.mdx b/api_docs/asset_manager.mdx index 2a4ba627e7192..922f389398745 100644 --- a/api_docs/asset_manager.mdx +++ b/api_docs/asset_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetManager title: "assetManager" image: https://source.unsplash.com/400x175/?github description: API docs for the assetManager plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetManager'] --- import assetManagerObj from './asset_manager.devdocs.json'; diff --git a/api_docs/assets_data_access.mdx b/api_docs/assets_data_access.mdx index 23fc89452b55b..678a225953251 100644 --- a/api_docs/assets_data_access.mdx +++ b/api_docs/assets_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/assetsDataAccess title: "assetsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the assetsDataAccess plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'assetsDataAccess'] --- import assetsDataAccessObj from './assets_data_access.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 685975a75bbcd..cf225ce504bb5 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/bfetch.mdx b/api_docs/bfetch.mdx index be34ee0630279..6bc884d785244 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'bfetch'] --- import bfetchObj from './bfetch.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index 8f3e8a7e491f5..2339e6488e252 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index b80a9cc36395d..e4365deef8c86 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 22733b389aada..adcfdad03b535 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index 89e65a5b24c25..c5c1b875ab500 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index c2daae947a252..bd35cbf44cb50 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index c730ea8fa0114..fee53fa5b9556 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_experiments.mdx b/api_docs/cloud_experiments.mdx index ff5b4d464bb5d..72778b64abe5f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudExperiments'] --- import cloudExperimentsObj from './cloud_experiments.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index 6c8127935cfe2..037be50397b62 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index 0eb5d6efff707..599d7a877df57 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index e9a1cfee92e8b..d12a9000ac657 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index f3c433f0df8a2..24494121d6288 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index cb48517c41f97..371d7024c9f99 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index c7cdd22a8702d..99879301b021a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index d0dc7afb1e6c0..43639daee3862 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: 2024-05-24 +date: 2024-05-27 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 16c9a91990ed0..19f24774ec3bd 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 967f035932699..ba13c86b8fdbb 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 50f5ea6137513..1653379b77ea4 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: 2024-05-24 +date: 2024-05-27 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 9b99e4b24bcd5..faf669346403b 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: 2024-05-24 +date: 2024-05-27 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 d20d90251a8e0..a7d95b6abb2dc 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index 3ea3deb355dce..a30c351e121df 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index a15efa25849f9..28f607334b6b4 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index 4472313f06924..4c297d5fa47d7 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index ccdd467fda0f9..ad3c71b1799e5 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 4abe92cc80da2..723ac413ace29 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -18,8 +18,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | ml, stackAlerts | - | | | data, @kbn/search-errors, savedObjectsManagement, unifiedSearch, @kbn/unified-field-list, lens, controls, triggersActionsUi, dataVisualizer, canvas, presentationUtil, logsShared, fleet, ml, @kbn/ml-data-view-utils, enterpriseSearch, graph, visTypeTimeseries, @kbn/lens-embeddable-utils, exploratoryView, stackAlerts, infra, timelines, securitySolution, transform, upgradeAssistant, uptime, ux, maps, dataViewManagement, eventAnnotationListing, inputControlVis, visDefaultEditor, visTypeTimelion, visTypeVega | - | -| | visualizations, lens, controls, dashboard, maps, discover, ml, infra, profiling, slo, links | - | -| | lens, controls, dashboard, observabilityShared, ml | - | | | encryptedSavedObjects, actions, data, ml, logstash, securitySolution, cloudChat | - | | | actions, savedObjectsTagging, ml, enterpriseSearch | - | | | @kbn/core-saved-objects-browser-internal, @kbn/core, savedObjects, visualizations, aiops, dataVisualizer, ml, dashboardEnhanced, graph, lens, securitySolution, eventAnnotation, @kbn/core-saved-objects-browser-mocks | - | @@ -61,6 +59,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | securitySolution | - | | | @kbn/monaco, securitySolution | - | | | fleet, cloudSecurityPosture, exploratoryView, osquery, synthetics | - | +| | visualizations, lens, controls, dashboard, maps, discover, infra, profiling, slo, links | - | | | actions, alerting | - | | | discover, @kbn/reporting-public | - | | | data, discover, imageEmbeddable, embeddable | - | @@ -106,6 +105,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | visualizations, graph | - | | | kubernetesSecurity, osquery, threatIntelligence | - | | | @kbn/core, lens, savedObjects | - | +| | lens, controls, dashboard, observabilityShared | - | | | dashboard, canvas | - | | | dashboard | - | | | embeddable, dashboard | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 94a7166973c1d..6f4c1dea939ff 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -1028,8 +1028,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | ---------------|-----------|-----------| | | [register_ml_alerts.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/alerting/register_ml_alerts.ts#:~:text=registerNavigation) | - | | | [job_creator.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/jobs/new_job/common/job_creator/job_creator.ts#:~:text=title), [categorization_examples_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/jobs/new_job/common/results_loader/categorization_examples_loader.ts#:~:text=title), [configuration_step_details.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_details.tsx#:~:text=title), [data_loader.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/datavisualizer/index_based/data_loader/data_loader.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [use_index_data.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/hooks/use_index_data.ts#:~:text=title), [configuration_step_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx#:~:text=title), [configuration_step_form.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/application/data_frame_analytics/pages/analytics_creation/components/configuration_step/configuration_step_form.tsx#:~:text=title)+ 10 more | - | -| | [index.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/embeddables/index.ts#:~:text=registerEmbeddableFactory) | - | -| | [get_embeddable_component.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/embeddables/get_embeddable_component.tsx#:~:text=getEmbeddableFactory) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/public/plugin.ts#:~:text=license%24) | 8.8.0 | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/plugin.ts#:~:text=license%24) | 8.8.0 | | | [annotations.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/ml/server/routes/annotations.ts#:~:text=authc) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 7763384170ba7..edf72c51f521e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 8700ada6e3d09..37967262f1944 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 9470b077bc0c1..d44a5dc8a5e22 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 5f6ede2706f29..6339fb3b2b01b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index daa23f3e03003..c66ec0daf4431 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index f5f1b9b6abe70..9e970566e7c12 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 7df6e9bf552a7..7316bdb6b5955 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.devdocs.json b/api_docs/embeddable.devdocs.json index 1322b23c1e5da..3398442983e06 100644 --- a/api_docs/embeddable.devdocs.json +++ b/api_docs/embeddable.devdocs.json @@ -14210,10 +14210,6 @@ "plugin": "discover", "path": "src/plugins/discover/public/plugin.tsx" }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/public/embeddables/index.ts" - }, { "plugin": "infra", "path": "x-pack/plugins/observability_solution/infra/public/plugin.ts" @@ -14640,10 +14636,6 @@ "plugin": "observabilityShared", "path": "x-pack/plugins/observability_solution/observability_shared/public/components/profiling/embeddables/embeddable_profiling_search_bar.tsx" }, - { - "plugin": "ml", - "path": "x-pack/plugins/ml/public/embeddables/get_embeddable_component.tsx" - }, { "plugin": "dashboard", "path": "src/plugins/dashboard/public/services/embeddable/embeddable.stub.ts" diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 0f03975d8dc82..7ed91529a9fb8 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: 2024-05-24 +date: 2024-05-27 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 307ba79aabcc9..7a17f34c192a6 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index 9ce88bb1ab916..f38506783d091 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: 2024-05-24 +date: 2024-05-27 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 ebb4f006ace86..b53756b6008e7 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: 2024-05-24 +date: 2024-05-27 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 8c07efa929150..5626378a0f6c0 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 6542fb00edc6c..0cf2f1ba5c272 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 182a708e2cba8..db7c297385ae5 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index c6a31ce67126a..a2de0179deafa 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index ee2d96da709cd..a36d3eeacfda9 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index a470059efb14c..c9232260fef76 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index e94808f2707a0..34d07a2d17dd4 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 54c6029b18238..830c5a2876a8d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index 20087eed7766c..7b85d1bef2ab4 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 6c06943fc0174..e3801b2775ef3 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index d1c70f7c0a86f..8094001ef9db8 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 870de6489d9c9..8470505020506 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index b6f87bd3764b1..88f1d1fbfe2ab 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 66aceaff9ae53..a5f3ff34bfd8d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index 8dc8d7853da44..599b36ce47d96 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index c1f1448bad18f..be3151b23af8e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index 8021fa3872b04..59504e88c143c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index cd9e2a2e5d231..830cc2d6d3bac 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 50acf5f61871d..a7fdfd213a205 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 7fb9aa8a7a3d3..5fe0cba31cc51 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index 9148c75a00144..76e4c37f5e6f2 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index ea6ee9e25f18a..55e2afac5e1c5 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index fb8d0d61c4353..cb861226dee24 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index 1f53d43ae4137..1597e582d0cbb 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.devdocs.json b/api_docs/fleet.devdocs.json index cc485026a9c3e..e7987f0be986b 100644 --- a/api_docs/fleet.devdocs.json +++ b/api_docs/fleet.devdocs.json @@ -25114,6 +25114,20 @@ "path": "x-pack/plugins/fleet/common/types/models/epm.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "fleet", + "id": "def-common.RegistryVarsEntry.RegistryVarsEntryKeys.hide_in_deployment_modes", + "type": "Array", + "tags": [], + "label": "[RegistryVarsEntryKeys.hide_in_deployment_modes]", + "description": [], + "signature": [ + "string[] | undefined" + ], + "path": "x-pack/plugins/fleet/common/types/models/epm.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 79dedb3ee428d..ab89a00834c7a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1309 | 5 | 1188 | 66 | +| 1310 | 5 | 1189 | 66 | ## Client diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 027d172fdc785..b6fa38c321d9d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index 79dcb830cb11e..75e493c31a6dc 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index 8ba7fd344cd22..ea1e067210f4b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index b78258826330d..8e56a1eb40b8c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_lifecycle_management.mdx b/api_docs/index_lifecycle_management.mdx index 41c8309475ce7..9def7c2abdc12 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexLifecycleManagement'] --- import indexLifecycleManagementObj from './index_lifecycle_management.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 9802f2a41ef1d..c164b68269a3a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index 8153bc2cae01c..8179231734ac8 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index 42f3e51e3ae35..16d21094deb97 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 5d4227bb0de27..e9d552e3f9ea2 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index efc7a494887ef..a35fd8f1b2cee 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/kbn_ace.mdx b/api_docs/kbn_ace.mdx index 668f038f6e8cb..7090c08d86c7a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ace'] --- import kbnAceObj from './kbn_ace.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index fafd6da65d8a3..01e426156b2c5 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index ca98b2af38a19..18e5c632f1bef 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index c06f5fbfddbfe..4c5b01052f3b6 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index a1f912bb205e3..4cc6d2ad7ea26 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index 9efbfcdb895e1..2a27a5c94ea9b 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index a2130b301d857..d5e350b203769 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index 86ea6492e3147..4ae44b98ad151 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 62c6a8839ccaa..962877f5cb324 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index aa94ecee7227e..6dadceb702c09 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 99b6fabf0450c..6e637c7fd498f 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: 2024-05-24 +date: 2024-05-27 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 dc90fa2f92e5c..6777b705fb00c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-client'] --- import kbnAnalyticsClientObj from './kbn_analytics_client.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index 04f24df27c3bd..82de6cf28a316 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.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 9286d5486fcaf..17d590e5edcc6 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-browser'] --- import kbnAnalyticsShippersElasticV3BrowserObj from './kbn_analytics_shippers_elastic_v3_browser.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_common.mdx index 1ee7e47d88dd2..c8d3cf6238eb3 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-common'] --- import kbnAnalyticsShippersElasticV3CommonObj from './kbn_analytics_shippers_elastic_v3_common.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx b/api_docs/kbn_analytics_shippers_elastic_v3_server.mdx index 14816f0aad9e3..146c5d74dbcb9 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-elastic-v3-server'] --- import kbnAnalyticsShippersElasticV3ServerObj from './kbn_analytics_shippers_elastic_v3_server.devdocs.json'; diff --git a/api_docs/kbn_analytics_shippers_fullstory.mdx b/api_docs/kbn_analytics_shippers_fullstory.mdx index fb20061c3457d..8d56793fdf3ed 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-shippers-fullstory'] --- import kbnAnalyticsShippersFullstoryObj from './kbn_analytics_shippers_fullstory.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 11d510821d550..2bf4553c8aaa3 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index babf1f0f51f7f..65fa823226173 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index b475cdcabd2fd..83a1036e3a31e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index 8ecc7ab54b1b6..8e28aa8b3bd8f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 621e99ccc1ff3..bc3c68982fe36 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index a189e52483f24..cd92084b37a21 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_bfetch_error.mdx b/api_docs/kbn_bfetch_error.mdx index f93ca4aa972e1..1a17b58820b19 100644 --- a/api_docs/kbn_bfetch_error.mdx +++ b/api_docs/kbn_bfetch_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-bfetch-error title: "@kbn/bfetch-error" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/bfetch-error plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/bfetch-error'] --- import kbnBfetchErrorObj from './kbn_bfetch_error.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 554cedb736e31..9ceb4537545fd 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index 2704629372fbc..2da21884a39c9 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index ce0e13e859e5b..1f8628c10a066 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index cb5980b048704..c96953e6b0477 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index 2f344658ac3c6..b9334e11202ae 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index 034fd4f8b1f2c..25ef89ab2129e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index 68fd997506364..472468d9658ec 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 000f8704c768a..96420b091b3d6 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index 81b8f5bced327..dbed3a1595621 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 3c0f9d26e267d..ba7c61490ea79 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index 351e211e77c3b..98e11d4734e82 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index 5dc9de9c8a32c..79ac063016227 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index deeca11fbacf1..ee8135c3c5272 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index c17d47e83490d..cbc6b269aadf6 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index 6f9b9d080ce38..bf17c59ff2f8c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index f330c0aea3b2c..f278a2cd42c42 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index 4da893732c1ac..da9c328b06eb5 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index 5780993f9b6d4..6499deac7ed4d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index bba48c92f6e4e..599e54a370d65 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index a16bd6c42222d..37c3c5df8f407 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index fe538f6d9cef8..1b1f74bb8ccbf 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 46aacf54d6be3..47def5616d9be 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index 6647818ed3641..f829fa0be1685 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index 580e25611feb9..a0fac27d2f86e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index 2319e64003105..544cbe863444c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index d91f16a400267..907fc10aa4b4b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index f4ccff13933dc..cbde5dd789b59 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index 4b70b54cdf6ee..bb3f83eec6d07 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 3f8f143f9f20f..f64d59412936c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index b8207bcc3b201..6d621b5d04e62 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index 61e49c0c5dc94..00374fe6690e3 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index c59e682b07f0f..1152589c3b86e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index 072535098bd6f..6c909437eebb9 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index f66265afc6b43..001ab6bf40bea 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index 909676bed50da..084abac29ca1e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index 700a9d15ad2ff..fdd05785ce775 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index 9abc4850a5606..9d358ca5f2de9 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index 1626885b30fd5..f36433d2e9c5b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index a26682ad0cd7b..0e57ff263dbae 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 7517e2f8a7103..20f5a40418b0f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index aef3b62400f77..c261d79bf2d73 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index 05e14961ed459..838e3f663da1b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index c615cd0ca2eb4..38ea045ca2dd7 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index ebb4a7419971a..1816c02361a22 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 6db6f1c107d7b..621c355a141bc 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index 8e6df37ac19dc..b6d418c2e0628 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 4ecc6dbae3096..1042ef8b2c958 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index 0f115a7445ba7..0d71d0d363465 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index 9dc7879b039b6..233a7fd8c191f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index 5fedd7d2e3e57..e05dfb9341922 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index 634b80ac14785..b763a6279b2f1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index e5857583c8e0e..080c0eb9bca6b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index 506260dc916f4..5f58987c9ccd0 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index 73a4d43652894..cc6176030089a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index 9870a636432e0..99363101902db 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index e07c71e9fc17e..a467363ab63bd 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index dc57562f00e24..24497190a6ff5 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index f905a64f99f5a..97c2849499dcc 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index 33a7e122ad9bf..7d1c1bf0b3ec5 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index d1affa7bad6b7..4d42e35533dc6 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index f1c9fe28bae6a..1a7175df0ce14 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index 7d875dcbd9a91..233713edd0555 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index 7e2990bb8af2d..27a78aa4ea953 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index 27ffa9ef4f07b..377faefc70428 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index 15f5473fdd3fd..d42df4d9dccba 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index aeee55b47bb4c..42ffc6f13c3fa 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index f08fd4db352e1..f1cc9527856c1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index e6b28c433b143..ad7935401bdb0 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index 96b4e15963e3c..6ac69dc82b5d3 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index 903caff878113..d6346e04bbca5 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index 8eaa477b38269..d5f16431b874f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index 67943d3220a3b..7b76f87033aa1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index 93994d6ba4a48..48bcc1ca9dc0a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index 70a4cbc2bb5c5..082a4a71f60dc 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index 246ff76ea2081..be5564af87cad 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 9dd4c242b682b..114a0ff780a59 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index 658f5c2012b50..c93b9631ea139 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index 3b2a4e84d9a23..cb4d4f7c2a654 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index 45dea9af5ef19..6803d420afeaf 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index f2ab0d311c1e7..c0b42689bd572 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index 38a44632bd699..ce30ce160f9a9 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index 9387238ee777b..b2fe36ef699da 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index 29c0c7b25bbe4..8cc7c20f0f3c0 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index 058f48d70b65d..89e7c0186b20c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index cde449b27df85..edb2a003f0a2b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index 9d14aaaef2f6d..18d8da8245fb1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index 89cff734a61c7..abe998d23c7aa 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index c690cc8d0066f..0aea1e7cf2b3f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index d988350d76af2..fb135cc13c0ed 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index dbb6c83e22af6..f72961f474669 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index b2280925e61c8..4be364df62491 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index 0f2b5014ebfbf..dfe6bea635234 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 66873d96ba67d..9fc740f7ac77e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index 919690a73c905..1f35eccd8de76 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index b91a8d0b2e51c..98e8799a39787 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index db7f47c50fecc..5b6437a31ff80 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index e2f19cc0e1695..6042fac5ab04d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index e71a493e54c21..99d39ebbb6cc2 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index b93b9bd01aab6..0a4e804eb98e3 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index b4f3cbe416c20..71c0f27c536ad 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index 809b786f3b099..92f83cd068196 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index c95d628631b4e..58b385afb584e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index 99fe7f480f469..b5538a6417a82 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index 0acb5fa66878b..c58bbf1350b6a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index 5205f5723eded..17804a2a2932b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index cafd27968b47c..7d7b40d66f4c8 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index ee3a3ef922889..6d1b9dccbcf31 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index 47afedb514a44..d00376abf75ca 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index 39e02eaec4e28..654836432d519 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index d09b2c9607e90..79e704bb8aaad 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index f20ae899ae115..7b1e7de9325ff 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index bf42fdb880e92..595d0a2300507 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index 033840ccaf223..db670ecf777c9 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index 1fa374ab67fa6..93a8b10e916ca 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index c708dff320ee0..c8c86bd76f134 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index cab71dee4f10a..21fd745e9c761 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index b6391fda8d90b..d22fb294f037e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index 215cf72b17249..6f1fd98b3e2ea 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index 2dd46e8075f3e..9cdb53cc04ad0 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index c4f554dc70e36..b65b4175560d9 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index 8858d1dcaaae9..6231c464fe4cf 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index cee49ecc81b18..f656575427911 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index 615e68ba54f44..fe9148f900292 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index 040f88ba20e87..d327bd9459b03 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index 237abe52549bc..6e73b6ca6fc11 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index 113645d1d5adb..362c8d8b94a8a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index 840c3a551a3d6..4de1a39d34bc0 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index cbab3add667fb..34bcb40f6464a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index 99fb0a7c82fd1..cc4dc32a67311 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index d44f7fdb8e0ed..63d1d05339ab9 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 15203507883b8..8dfa8e576931c 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 881809caceabd..8a83a877097d1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index 8279126418348..7993fb3b05d27 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index ebfd1fed3cab6..fb16e9ae363c1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 334685d46009e..4813d017b13d6 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index af6cf50f80583..95ba9aef4d19b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index 7ba99832890a6..17524185a8bbf 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index 2337263f039af..c2189782caae9 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index eb4d4e5e30b8a..3bd8c5863eb7c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 582a1f1bbb324..b44d92e1e61d0 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 8cb8cc1083154..9cf3f26c110ef 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index 7fa566a6bc5c2..49a79449cc5d9 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index bdfeff8968db8..dcb8eaeea2d8e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index 4e9ed55bf5dde..512ab251f55cc 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index bdb3cde6e95ca..03055eead866e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index 0a8106649b7f4..62d897062a66e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index c75d1534d77a7..906bb1847b9ba 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index c6a4bac606d53..cfbd9d6c7f399 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index 43a64a3b8edbf..63dd24e48669c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index 58d157ca34e2a..0381032011a6b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index ae1b24ce3185d..13cd3db1ca3e0 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index 5004dc1630242..e8a146fabe03c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index 3adbcde8689df..34decc2c10999 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index 41ce61850472c..7aa3bf7b7bd14 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index 59e828b84221a..c37e1125563f1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index d27fba8941cd1..fc57e6f6f1267 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index 484f1cc9044fd..9b2160767157d 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index afab3cec5b44d..c9e5e31a97135 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 24f255c1b8fb6..14f00d5d6fe50 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index 9caf0af1fa815..525794f559e16 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index ed80acfc298a2..6d7ec3d7d8e93 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 76f43f1bbec15..94fd5961d50d7 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index 152e83d41617c..d63d58a224dbf 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index b35f833d7cb1d..d5131ea030434 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_common_internal.mdx b/api_docs/kbn_core_status_common_internal.mdx index ecadb62630b4c..f3332cc7f9f30 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common-internal'] --- import kbnCoreStatusCommonInternalObj from './kbn_core_status_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index 40dbe315eb605..91f95b8105712 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index f318280858453..334788c03fcd7 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index 01f361fc3f45e..3c411e4e0c948 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index eed6e28929e8a..361d6f8deeea6 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index a0554906da7b3..b932d4dbd6bf0 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index 8842ee450ac86..3c19c0723ec4f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index df902033b253d..f4ae005f6a14a 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.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 ea360da7fea07..e2483e1a446e1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index d4ebaa5055459..b3b3d6444879d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index 5f1705cfb81ec..6534e027bbac2 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 71e27678c1b6b..30a45d3fa1d43 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index f85d0acd908ab..cdcdfd085da8b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index 6736e77002911..263cc553262cc 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index 396c012dd7bb6..0be6298718c6f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 3ed1e3f60ca3b..a3ae704f58fdd 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index 8313566bd60c1..008865cf75451 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index c8727822cac46..8d8394ec3d41a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index ad6d7947fa44f..9d4eb0002ef39 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index 39e96506eff7f..73178642f1051 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index dcdcfcbac3a45..67fd2a9a938e3 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index 0ee933bf08e9e..48980ac73b4e2 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index 1ebbc45a16cd9..cc0b7d081ffae 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index 6bdce20ec4569..0b89752421732 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index 9a8c2469367b2..ae8b77ad7b193 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index 672b82605c7f3..657f320c1100b 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index 3b47905618f9a..b5b6f57f488f8 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index 685087c866ac0..1b76a1eb3d879 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 2f5d5d868e78e..399c457fd4787 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index 9feb4db9089a2..38787ae7fa0d5 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index 6cd36c4a4e590..f539eee5f78a9 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index 5c102083835e8..1556e68abb099 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 3f972ca464511..4a47c0ef80838 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 5bc3ae6210cc6..dff29f6b0f077 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index cee0f7c998215..c7a94ef3dda45 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index fd5777f4625b4..69c0f2528adce 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index ac67687e05717..94e0841b320f3 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index e8a59e0630244..2215254526bcb 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index c4af9074bcd95..51eabe740c3c1 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index 2f65f4412f9cd..1b61b79dccc93 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index e8ca952c1c61d..a777b53158e49 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index 36144d2ae2374..d17394158986b 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index eb56875bf539c..949fa99745ca9 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index 151f7616afa67..eb1fe118432ed 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 73b414f99d802..64d6ed9f1f825 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index cc0d5c6e96b7e..ad4dda37aabf7 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index c4c27bece7bff..b85bb3ca1b665 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index dfae276b32bdb..82a96981eb133 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 995b83f949ee1..cc17543cba74c 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 79cc3b9e3a5c5..6347f7ff9d568 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index b769d08ec8917..7156db6a7d083 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index fa2f1667f9ab7..c4f21a9ae9e37 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index 7e6b0c6aceef5..799125d79f534 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index 37de496d34fea..9ac2897d8114b 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index 8c8ca98afc88e..3bfb374499fb1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index ed327603aa451..b89028775a2af 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index 1f51a030e621f..e0130fdbc9770 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index 6893f75315f30..ca3c40d95674b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index ba2e201835e4a..4d7f26b85b885 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 1280623574e70..36209aad520e3 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index a2f7e2d7114f6..1884280fea8a3 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index e0a8b790a75cb..0ef8e1895ac02 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index e390f2fa93898..6eaebcae78676 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index 2875edb89ebb9..ed87b9eba83d8 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 09a97fc321257..dfeaf1e1bd0aa 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index 4398c2800491b..5781af4f1bfb0 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 74a9d332fdcfc..8ae742997ea71 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index c574bf1c4c09a..faf0d90f30b04 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 6a10d6e71589b..fbd0fa95ea454 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index b765f55d12d20..e8dcd5e568b00 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 7300d6d64697e..f6b14cea32796 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 0ee8c1a7f7cfa..9fdc2b1161d0e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 7d21cddb833e3..91572c451be33 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 6c0d4507e809b..a6fc22f62d479 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index a509c6a9c3b4c..870a7738e7f9c 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 2f972d0221272..578cc2faecd12 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.devdocs.json b/api_docs/kbn_esql_validation_autocomplete.devdocs.json index 40625e66ca85d..b97b81a2eb1f5 100644 --- a/api_docs/kbn_esql_validation_autocomplete.devdocs.json +++ b/api_docs/kbn_esql_validation_autocomplete.devdocs.json @@ -1186,7 +1186,7 @@ "section": "def-common.FunctionDefinition", "text": "FunctionDefinition" }, - ", { withTypes }: { withTypes: boolean; }) => { declaration: string; examples: string[] | undefined; }[]" + ", { withTypes }: { withTypes: boolean; }) => { declaration: string; }[]" ], "path": "packages/kbn-esql-validation-autocomplete/src/definitions/helpers.ts", "deprecated": false, @@ -3235,7 +3235,21 @@ "FunctionParameterType", "; optional?: boolean | undefined; noNestingFunctions?: boolean | undefined; supportsWildcard?: boolean | undefined; constantOnly?: boolean | undefined; literalOptions?: string[] | undefined; literalSuggestions?: string[] | undefined; }[]; minParams?: number | undefined; returnType: ", "FunctionReturnType", - "; examples?: string[] | undefined; }[]" + "; }[]" + ], + "path": "packages/kbn-esql-validation-autocomplete/src/definitions/types.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/esql-validation-autocomplete", + "id": "def-common.FunctionDefinition.examples", + "type": "Array", + "tags": [], + "label": "examples", + "description": [], + "signature": [ + "string[] | undefined" ], "path": "packages/kbn-esql-validation-autocomplete/src/definitions/types.ts", "deprecated": false, diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index c97ed9f64cb63..49458cdc03db0 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 193 | 0 | 183 | 10 | +| 194 | 0 | 184 | 10 | ## Common diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 53a3c58c6bd0f..e6baa12440493 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 69b2a23d70f53..e57a5ecb345e0 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index f0c091e0cc7d8..6692ba53f6458 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index e53515dc66375..08c8e98066845 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index bd5f88ec95de3..872156c797e8c 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 7282b9b37e829..588c36c87332d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_formatters.mdx b/api_docs/kbn_formatters.mdx index 5dd8c2c76fa09..c86e56de64496 100644 --- a/api_docs/kbn_formatters.mdx +++ b/api_docs/kbn_formatters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-formatters title: "@kbn/formatters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/formatters plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/formatters'] --- import kbnFormattersObj from './kbn_formatters.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index a5859e459f219..559d47c01a7de 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index 779c8c4da71d8..f422587ecc2dc 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index 3987841762111..10b2985621e19 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index c7fa5d6528f98..6c81ab9dec28d 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index 15c0695889139..416f4991ad09f 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 3f0375b37859a..aa8deafe55c1c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 21c81a81c8787..213757d025450 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index 3759c8b702e09..f26f2cecad027 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index 4dd24a8154425..b3b2722cec2df 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index 18e0ede1b58a6..61f9840bfd9e0 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index a37376d6bf80d..64859d6488416 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index 63101a6c97d06..ee6db5ed7dffd 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index f35bf61546e58..51c27347f4852 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index ed6f26bca7d75..436c5777e9416 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_management.mdx b/api_docs/kbn_index_management.mdx index d3eeddca58b6c..7912dae2fdf46 100644 --- a/api_docs/kbn_index_management.mdx +++ b/api_docs/kbn_index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management title: "@kbn/index-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management'] --- import kbnIndexManagementObj from './kbn_index_management.devdocs.json'; diff --git a/api_docs/kbn_inference_integration_flyout.mdx b/api_docs/kbn_inference_integration_flyout.mdx index cd4332ba3991e..19caca0579a3a 100644 --- a/api_docs/kbn_inference_integration_flyout.mdx +++ b/api_docs/kbn_inference_integration_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference_integration_flyout title: "@kbn/inference_integration_flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference_integration_flyout plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference_integration_flyout'] --- import kbnInferenceIntegrationFlyoutObj from './kbn_inference_integration_flyout.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index 1aa7b429a690e..a1c174987e3b2 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index f43cd69b05459..0ef231bee51a4 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 6e0f088f1ce3d..452040267cebb 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 70f8b401985ed..b71c9ff4837c0 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index e9dcf100c3983..fa6e70ac1ed93 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index 82758f975d7b6..f2cb48a3627b8 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index f7869ab4f77e7..6742d26dcae45 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 5295d7a8f15a8..7ade04d52e4a8 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation_popover.mdx b/api_docs/kbn_language_documentation_popover.mdx index 4a329327ef98f..ad5c3f6f37a40 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation-popover'] --- import kbnLanguageDocumentationPopoverObj from './kbn_language_documentation_popover.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index b3eff5d6863ff..9ddcbf8ad3ae0 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index bd89d7e082fce..2bc8efd61c186 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index 7b672d039f3da..c16356e58d73e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index 9b386e9285e00..45c54d6ce8f29 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index cb3510007411f..bf584ad706562 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index e3376c226ba73..54ecdda1db2bc 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index 8eae7c73cb947..8919d0610f2d6 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index 36eddd166218f..18ba80d52a1d8 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index d0fff926be690..6cdd3754eb575 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index 6ef66604120dd..f06b04c9b4e9f 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index 5fdf1c8c8387c..5182b52733766 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index 8b750ccf023e4..1d1333c514069 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index 7f82f349df177..a6c57d2679c20 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.devdocs.json b/api_docs/kbn_management_settings_ids.devdocs.json index b4b24972b6989..5ddb78e79b853 100644 --- a/api_docs/kbn_management_settings_ids.devdocs.json +++ b/api_docs/kbn_management_settings_ids.devdocs.json @@ -1344,13 +1344,13 @@ }, { "parentPluginId": "@kbn/management-settings-ids", - "id": "def-common.OBSERVABILITY_ENABLE_CONTAINER_ASSET_VIEW_ID", + "id": "def-common.OBSERVABILITY_ENABLE_INFRASTRUCTURE_ASSET_CUSTOM_DASHBOARDS_ID", "type": "string", "tags": [], - "label": "OBSERVABILITY_ENABLE_CONTAINER_ASSET_VIEW_ID", + "label": "OBSERVABILITY_ENABLE_INFRASTRUCTURE_ASSET_CUSTOM_DASHBOARDS_ID", "description": [], "signature": [ - "\"observability:enableContainerAssetView\"" + "\"observability:enableInfrastructureAssetCustomDashboards\"" ], "path": "packages/kbn-management/settings/setting_ids/index.ts", "deprecated": false, @@ -1359,13 +1359,13 @@ }, { "parentPluginId": "@kbn/management-settings-ids", - "id": "def-common.OBSERVABILITY_ENABLE_INFRASTRUCTURE_ASSET_CUSTOM_DASHBOARDS_ID", + "id": "def-common.OBSERVABILITY_ENABLE_INFRASTRUCTURE_CONTAINER_ASSET_VIEW_ID", "type": "string", "tags": [], - "label": "OBSERVABILITY_ENABLE_INFRASTRUCTURE_ASSET_CUSTOM_DASHBOARDS_ID", + "label": "OBSERVABILITY_ENABLE_INFRASTRUCTURE_CONTAINER_ASSET_VIEW_ID", "description": [], "signature": [ - "\"observability:enableInfrastructureAssetCustomDashboards\"" + "\"observability:enableInfrastructureContainerAssetView\"" ], "path": "packages/kbn-management/settings/setting_ids/index.ts", "deprecated": false, diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 8e698f93fea85..1aa2558466b9a 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index db0d52392d324..0216db77e2541 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index dd737d1ba4e2b..873cb21d87155 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index f143006787e7b..6d095efbd14a9 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index aceb187e7c749..c82232ea18aed 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index f2ee9c2206f64..6746e2168c713 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index 3868e2b15e84f..00dc196b612a3 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index f93a99a72b11a..216c680d5bc92 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index 3936d3bc3f8eb..655addfc327e0 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index 2d600b386a2c7..9279be7cab54c 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index 557f83248daeb..54e147e71173f 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index 013e5a4609c1a..ac644f28f9944 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index dc61ea93474a6..0e06489bcb017 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index 58a6d67dd6814..a64750bfcf07c 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 436ab3d3e4d86..815e2df99d117 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index b2c686428fff0..3d8db9c9a8d25 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index 0862edca82983..b9314e19932e7 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 04ab38b1aa87a..f588ddfe36832 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index 5d6393aa3d057..d29b329188f87 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index a55ac3dceb139..57ea2a9b30780 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_kibana_theme.mdx b/api_docs/kbn_ml_kibana_theme.mdx index 74a5b6db28d19..2af6d1e30429b 100644 --- a/api_docs/kbn_ml_kibana_theme.mdx +++ b/api_docs/kbn_ml_kibana_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-kibana-theme title: "@kbn/ml-kibana-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-kibana-theme plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-kibana-theme'] --- import kbnMlKibanaThemeObj from './kbn_ml_kibana_theme.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index e8ff7e9b17207..ca9dc59936c5c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index 7d9ddb0c9dc28..bb78688e3f9ca 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index a93deac7f4480..b47e3f81b3942 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index 0c60d620c0f39..44e36bf9c1ab4 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index c89a54e896a61..8057880e30c40 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index 7002a9674ccd1..a75a4e96bf760 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index f0caf7de0317e..9782e3719d0af 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 021e1fed1372b..d1d695e8a2383 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 3ca76c27a90f7..00c99dfa99e31 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index 0d9b585620ae1..d24c763ea11f5 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index 07c47c6e1189b..708f306c26a6b 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index a7fe767d8bce3..40a49a16d0e32 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 3c0aeaae4800e..1210d4b177616 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index bba132cdad00c..b2e615c757bec 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index d519d1f1c4a7c..95c4b45e27b1c 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index fa9fdc6f53147..edab6c2f8d45d 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 06d0e9451f3ff..558863972f7f0 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 9f80b2c109cae..dfd1bc0512ab0 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index bf22b60086162..b99156ac0b702 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index 43ebba64d53b1..f14af3c059fde 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 9daaeb6ce8263..3002cf339f020 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index be1887dce41ba..ac0621496a6f6 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index c3fe7661261d1..5e97b299897ba 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index d63b39598801e..e7209b93128f2 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index 808672ea8f429..0afee9083ab2d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index 7b74faf36e701..297974d343a7d 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index 017503c5efd9c..7485ace1eda6c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index c3faae2d8845a..ace45ffb489ae 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 3baf7f185582d..f5cf0dc3a1f21 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index aebc887cccabd..ceebc7ac83580 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index 8a2e3a0b5f8cf..956eb75e30be9 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index 359e98f0d3f0a..7ae20499de1fd 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index e3d7756cf1855..4b25ff900a1f1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 9b43a4b4f5d39..654acf461028e 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 492e042bdfb94..6454ca4440b14 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index 6c5a6241435bf..f2cba0212429f 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index 00f3e97c7c3b2..a2b525b42bcd0 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 3c0dcc88052f3..81e850e7c72df 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index 8324881a57ffc..c54a570c9ddfc 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index 85857b57c5957..55af9cc7c5c47 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index 0ef923c25b393..9d06b02bebcbc 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index e2feb0ccbf73c..434ca8a520038 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index a5d401a48dfaf..3d08bcb10c89d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index 9c3551591fc3f..8a720c0082e0d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index c6dec769f0afb..8f1bd336fb910 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index 02bac16fcf7c4..c8c78efb5c1e2 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index e0c4acedcbab4..cfa6d6da96cc8 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index 5b90ea32e3811..2780da85adab0 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 7dde00ad16766..fb8a6d9e62425 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index 27d583248839b..b4f8f381125c4 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index 8324f251c3a20..9aa265a90fa85 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index fb39628d4a067..c203c52249a07 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index d1e92a71ec254..dd72fd6ca1878 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 93b0619d12d22..4cfbd615316be 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 88c885e867e31..7f42011d2aa0c 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 0b8d242f5fc1c..4a7981635308d 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 95737aa864f53..38346a4e39963 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index cc250e27033a9..300d466e7eea2 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index 5220c45eb4ebb..f5c6b3bb0ef50 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index b551ad2a20c3d..4feadb9dbcfbf 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index b34232c13b5f8..a451e46369f7d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index c49f111942187..99ad978bb1f77 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index e69df56d20bab..d15c94b3f9364 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 30d0ea8326cac..a98862d2203ef 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 33f103ea761ee..c7821604daf34 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index f2be01e7bb6e6..a028213130b8f 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index ed242946d7fed..021bcdbd3a39a 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 376859461862b..718dec065a26e 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index 1d527daf9fe7b..d6b640edf0ad7 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index f46079d6881e3..fcbd593432e5f 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index b3b2827009dba..9f97e1833832a 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index 787add3df955f..dcf87716624a1 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index bc769ab13d5fc..f6c1f56249e94 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index 271458277efa8..79042522e66ac 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index c5abfa2f6d863..15e899799f590 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index ec5ec473e51f5..18e9ef6ccac45 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index 220a067aef038..326e27dbc1edb 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index 42aa6396bddf2..c24741ae5838e 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index b90428765c016..d9fc4da298784 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 93013ece93211..b62ff38b32357 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 0551505eccd7e..dad70e27acc43 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_grouping.mdx b/api_docs/kbn_securitysolution_grouping.mdx index 33c14a78fffa6..acb8f05fc9a9c 100644 --- a/api_docs/kbn_securitysolution_grouping.mdx +++ b/api_docs/kbn_securitysolution_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-grouping title: "@kbn/securitysolution-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-grouping plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-grouping'] --- import kbnSecuritysolutionGroupingObj from './kbn_securitysolution_grouping.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index 83894d1b8a33f..1da467d78946a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 39c2ee8740c63..99ce515f12797 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index 3f190d880c181..78b159836aef3 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 162587bf80440..312fccd054c47 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index 43ce6a7a89d44..ce3125fc94091 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index f7caa43f7b1b2..f98ad3c88c6f5 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index 0250434a5220e..c358c03853b88 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index 935813883ef49..fcaf221b29043 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index c0f6b5ce45d1b..449bd40dd901d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 34eb14385efdf..983800f85e786 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 4e5ee154f510a..b4e6f07b13746 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index 5f690fa5c43f5..c76a5552a7e6e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index d8b6f33e26e09..c666fdb7efac4 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index fb8de339bcb5f..09c664ec88bd7 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index d25b86b434745..3ef7af4c5abf5 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index 087abc9d3477e..5ffc0c80f6e2f 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_project_switcher.mdx b/api_docs/kbn_serverless_project_switcher.mdx index a832946fb50db..02df932ebc096 100644 --- a/api_docs/kbn_serverless_project_switcher.mdx +++ b/api_docs/kbn_serverless_project_switcher.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-project-switcher title: "@kbn/serverless-project-switcher" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-project-switcher plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-project-switcher'] --- import kbnServerlessProjectSwitcherObj from './kbn_serverless_project_switcher.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 2f56e88a60610..69a6525d74894 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index 7c1c4c3d7cc4e..6ea53d1c9b045 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index 0df04baeebac9..a7d3792b8f486 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index a057e6d8f3eea..5fa4a4fcf7086 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index d088dfde31988..6f9cd35248b6f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index cead63de20888..94839211fe301 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index b45b143509af5..9ff57dc422a9c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index 42fd1949c0e26..98159f4cf2280 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index 2505328c43588..f740bd50809bc 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index ce10d06efc1fc..001480a720e6f 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index 609e77459f219..8488046346508 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 7d58080ca2a12..756afd28a2ab0 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index da1a3778f7783..11b17c59d9407 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index 0bde06967dda6..e69066fd658e1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index efe59adaaf705..37abcd2c84e2d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index 360a835c0b813..bdd641263c617 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index b3c93d877cb52..90a65998ca67f 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index f949341ad23fc..038ff15309377 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index 8dfbed0c2e374..6b2f9f66f52b9 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index e805d1ccfbe44..b41876872e32d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index 191dd9b251b31..e78f88e0c0390 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index 98035d41c5afb..58980921c9853 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index d617301a58b37..2bedfa2a2a67d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index b40a969effdd4..84908b9d83e93 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index 9c8c7943ce4c9..57add91686671 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index 8b11a0d005670..75e8b6e02cab9 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index a6a201e51575d..0a308044f408d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index f8e99283c1dc1..a76b273d3ee3a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index 79a6765d56864..37c0af20730c7 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index 2dbebdd9ab634..2cdba9ff6e844 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index aa5b4ccb778da..0a44a59c2184b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index 36b633bf8080b..cc798934af389 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index c6d84494e6729..c6fddc888402e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index 57e577dc535d4..4123577f698e9 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index 302d9ed27d69e..19b620356d341 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index ded4ac6ec786d..ee79198737c8d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index 85f7d1e8d33b5..7669491b384b8 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index a870c501d0b99..91f4cc1e346d9 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index 9cb5f05c9c9d4..bf6f18a661ff3 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index bed979963c456..ec4b06b70ea5f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index 1d5b8f048c51c..9cc367fd800b1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index de139b756e65e..4ffe510c673b5 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 866f0472e4607..a93d15bb0b582 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 3d5b513953f04..dfe594f59dc58 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_oblt.mdx b/api_docs/kbn_solution_nav_oblt.mdx index 5c431930553e9..6f8554f49d68c 100644 --- a/api_docs/kbn_solution_nav_oblt.mdx +++ b/api_docs/kbn_solution_nav_oblt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-oblt title: "@kbn/solution-nav-oblt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-oblt plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-oblt'] --- import kbnSolutionNavObltObj from './kbn_solution_nav_oblt.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 836de80fbfed1..68a5655feb3ac 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index 338d932a75536..d6b473077c262 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index 0f7ab59b8021e..d4efc8b1a3ff2 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index 39aec9016c710..4fbb610874f04 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index a9ac9b840a32a..fc2864d5177c8 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: 2024-05-24 +date: 2024-05-27 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 9a5534d65f9eb..36069cc7e5da7 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index e09190f34ff45..c174c58d92058 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 4349eb5baf3cc..228abae8fe492 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 887505e269a3e..b25c3c2800b5d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index 52221555fb1e3..28ea933713110 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_text_based_editor.mdx b/api_docs/kbn_text_based_editor.mdx index daf123b33595e..4eea013748afa 100644 --- a/api_docs/kbn_text_based_editor.mdx +++ b/api_docs/kbn_text_based_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-text-based-editor title: "@kbn/text-based-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/text-based-editor plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/text-based-editor'] --- import kbnTextBasedEditorObj from './kbn_text_based_editor.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index e427cb805626c..d7456b738b638 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 8339cad27f4e6..9600f3f8ecf6f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index 01cf31aa5c1e1..a5c0aedac2b89 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index 5b1f63ef8e683..edf52c8cc4395 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index fcf2a97f8004f..0bb9b907b443b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index a6b842b84cd87..69abd42f74ad8 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index ca61db3b994a4..3c2a972fb78eb 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 1ee06fbefe3b4..cc8be5888164f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 1a2cc34462d6e..6f4c9d037d610 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index df69eb97a4610..a2df8fe1129db 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index e88913138a121..b736edb28cc59 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index f2ad354d131ef..437f2fc9b4b32 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index fa1a01746b82e..fd5e6e76735e6 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 4f415ea754ca6..eda1dd3807b63 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index a844ade5f8150..5d213f7e38db8 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index f44808dfd94b5..a83a7ba0716bf 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index 2846f9ae955bf..c217cad220205 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index 5a105bd1b1628..bda43243d4ad5 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index dc7c380351583..f8550e8934138 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index a24dc36df0b74..e18522f867474 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 95adab044f93f..8619fa38b538b 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 9a69a537f997f..76d5784f088a5 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 7fdf2edf0b724..b9427f82c7946 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 80f9528c79b9c..69fd5beb8b033 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: 2024-05-24 +date: 2024-05-27 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 13940fc995bb4..9232b879706ff 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index 890cfbde9988a..d1ec3a99606d2 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/kubernetes_security.mdx b/api_docs/kubernetes_security.mdx index 6487e77309ea5..bb3a7b4c023cc 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kubernetesSecurity'] --- import kubernetesSecurityObj from './kubernetes_security.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index 7efbc4421f997..ef3ff0add2502 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index 0e525faa40316..8854d670d581e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index f0a62c68037d3..e09bc8cc4cb27 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index 99b5540b95365..9ea1c3dcc9648 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index 12f5822d23343..6798f9529633f 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index 0c855e819ff00..8c92df255302b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index 728d9b057af81..254cb5879f686 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_explorer.mdx b/api_docs/logs_explorer.mdx index 5659347920a3b..ced198a674de2 100644 --- a/api_docs/logs_explorer.mdx +++ b/api_docs/logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsExplorer title: "logsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the logsExplorer plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index 181401aeb3496..3f3cf17ff3716 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index b0e1c9868b24e..5f97bdfb6aa88 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 61596cfd5c529..104f76c0aaec8 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 36bf2cce24b12..3a627a8747839 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index 00b4bbeb12335..5210a1fd9593b 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 2e0332bc6dd40..13cfed8c32f8f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index c6b6c104c99e3..203c7d6952941 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index c5c2764b8c04b..5a0c1e2017abf 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index 77e978621e5ae..cf3d8179ff771 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index aac1480b13c94..bf67f754011df 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index a93cf40853939..4e90a5b253dd2 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 16be9735cd09c..4fd67b0e06c65 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index a530caba89476..005246404174f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index 29edb72641aca..8a7fa5a2caadf 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index eafefdae2bd06..ff1ea8744ed83 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 6b302b9fdaaa7..dc537b2f2d403 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index 11c98224c454d..22d904218d2cb 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 74c27896ce0cf..ba44f8d10d3ad 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index a792a6380b547..69bcdbdb4dea7 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 39f19d98f12ae..d7415511d62ad 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index d091ccf300fa3..30104916fc40f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index bf4d00c4d8667..56b998c077d73 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index c7b4c8909f99d..c128d6c77dee6 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 48444 | 241 | 36942 | 1864 | +| 48446 | 241 | 36944 | 1864 | ## Plugin Directory @@ -98,7 +98,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-gis](https://github.com/orgs/elastic/teams/kibana-gis) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 84 | 0 | 84 | 8 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 240 | 0 | 24 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 2 | 0 | 2 | 0 | -| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1309 | 5 | 1188 | 66 | +| | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1310 | 5 | 1189 | 66 | | ftrApis | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 0 | 0 | 0 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 72 | 0 | 14 | 5 | | globalSearchBar | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 0 | 0 | 0 | 0 | @@ -493,7 +493,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 1 | 0 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 63 | 1 | 63 | 6 | | | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 52 | 0 | 50 | 0 | -| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 193 | 0 | 183 | 10 | +| | [@elastic/kibana-esql](https://github.com/orgs/elastic/teams/kibana-esql) | - | 194 | 0 | 184 | 10 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 39 | 0 | 39 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 0 | 52 | 1 | | | [@elastic/security-threat-hunting-investigations](https://github.com/orgs/elastic/teams/security-threat-hunting-investigations) | - | 38 | 0 | 14 | 1 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 0f2edcde88fd0..f2e2691c3a11a 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index c220246f99db1..188aeee26d864 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: 2024-05-24 +date: 2024-05-27 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 359322b10b9c7..87a97a4fff1c8 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index 427a3486dfa37..0262ba7413138 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index 5ac0c888eef18..728df6c4da6de 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index 5de7bd244fb16..7b11bd86c3c73 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index 4b5ac71d070b3..d59cd6548a15b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 284720f78a1f1..4c20d7b9fab56 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 47a059050556c..cc4cc5ab4e695 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index 3be4ec99b5658..c112f80f4a56c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 3f5a6e0986623..d84ad5b34666e 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 8a283fd58b907..720c89c9c1a07 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index 10f1c54e86a4e..d151f3195927b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 095f74d720395..92e475aa39f67 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index fe6d6a93f56eb..7bee8300eb540 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 54aec683bc94e..38c6a8d0fcc59 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index e4ac4bd9ab089..231bcb2d2d533 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 000c11d8dbbc7..f1c683fb0748d 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index 3e26e0fe9c2de..75c98b3be8bf2 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index 60b5d8f545af8..05c693117a837 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index dc3c19666d11f..30453dd9c694d 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 5986bb936f2dc..bda3227864531 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index c3851a35558f4..298bd41f73b5c 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index e32f42d5cf492..08ff77a4cfae3 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 28946405d1c4a..102ab7c7105c5 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index 7579dba45f9d9..f026346acd676 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index dbfcdf77d6cee..bcf48ef39606a 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index 5987b54820048..710bd770f896b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 72c565c6f7e87..ba59a583a7618 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 852ec8fda1a71..3ae4618eca759 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 47417e4799866..095a36a6ee964 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index d02bce54d307d..6824f54bea5e4 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 66b393185c3bb..b21d67d110f2f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 1e60ae211a315..af57ec3c9d24b 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 6d835b73a9fab..f276bd6db21d5 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 22866b6c8c728..b2d0b5fab7ced 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 080cd42d8e793..6019b2e5d002c 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_collection_xpack.mdx b/api_docs/telemetry_collection_xpack.mdx index f4e0ab3f3d72c..7695b653d7824 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionXpack'] --- import telemetryCollectionXpackObj from './telemetry_collection_xpack.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 2f0f5ea28b22d..5866d778b46d1 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/text_based_languages.mdx b/api_docs/text_based_languages.mdx index caf66bd513b2a..b2d363a49f1da 100644 --- a/api_docs/text_based_languages.mdx +++ b/api_docs/text_based_languages.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/textBasedLanguages title: "textBasedLanguages" image: https://source.unsplash.com/400x175/?github description: API docs for the textBasedLanguages plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'textBasedLanguages'] --- import textBasedLanguagesObj from './text_based_languages.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index f608b7b700ff1..6fd89ca19a002 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index 755868cb98640..601b3658ded6a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index b1990aef57cdb..e6a7ff5508aae 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index eaa5e23d3c291..9aaf4e432015a 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 64a5cb9d40ceb..971f94d248e12 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 31877ae7e09db..e9741083768d5 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index d315349b0d491..609595107d987 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 0152f601b7c30..84e6a1819d111 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 3941dac118646..f9cdb5e94c6c6 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index c3bbc3ce2e333..bd525a0e518d5 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index 00788dee33478..ff645649148c4 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index 956b46ce6a3b1..1a27ce90a9511 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 362186a7c033b..5ed4c1db33ed2 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index eb7d4b2f31734..ac14c74d0b776 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index 4b1379baf3e52..e035d5c82535f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index f47bb32dad01d..ad506284484e7 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index a38b4ed0a5d16..f4a58ea922220 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 336b5362b2209..ac7b57fe7cf35 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 301929b876ce6..55df8f57187bf 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index f5bfe4363f07f..3713b397cc268 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index fe35fa07fcaaf..b98e6a52b9387 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index f944581881feb..04b1ca8a4bc46 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index 1148f54c22285..9a42b9ac4d2b8 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index cb43d04403c35..919231244721f 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 873000edb0550..ae662428e9820 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: 2024-05-24 +date: 2024-05-27 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/docs/api/spaces-management/get.asciidoc b/docs/api/spaces-management/get.asciidoc index 48245b7786604..d2dbeb0a3f4b4 100644 --- a/docs/api/spaces-management/get.asciidoc +++ b/docs/api/spaces-management/get.asciidoc @@ -31,6 +31,7 @@ The API returns the following: "color": "#aabbcc", "initials": "MK", "disabledFeatures": [], - "imageUrl": "" + "imageUrl": "", + "solution": "search" } -------------------------------------------------- diff --git a/docs/api/spaces-management/get_all.asciidoc b/docs/api/spaces-management/get_all.asciidoc index 3c95b1b904441..0fd332c12b739 100644 --- a/docs/api/spaces-management/get_all.asciidoc +++ b/docs/api/spaces-management/get_all.asciidoc @@ -71,7 +71,8 @@ The API returns the following: "name": "Sales", "initials": "MK", "disabledFeatures": ["discover"], - "imageUrl": "" + "imageUrl": "", + "solution": "observability" } ] -------------------------------------------------- diff --git a/docs/api/spaces-management/post.asciidoc b/docs/api/spaces-management/post.asciidoc index 035fe897da251..b72d4df79c3d6 100644 --- a/docs/api/spaces-management/post.asciidoc +++ b/docs/api/spaces-management/post.asciidoc @@ -36,6 +36,9 @@ experimental[] Create a {kib} space. (Optional, string) The data-URL encoded image to display in the space avatar. If specified, `initials` will not be displayed, and the `color` will be visible as the background color for transparent images. For best results, your image should be 64x64. Images will not be optimized by this API call, so care should be taken when using custom images. +`solution`:: + (Optional, string) The solution defined for the space. Can be one of `security`, `observability`, `search`, `classic` + [[spaces-api-post-response-codes]] ==== Response codes diff --git a/docs/api/spaces-management/put.asciidoc b/docs/api/spaces-management/put.asciidoc index e8f75ee089d77..0d1c8d5f2e779 100644 --- a/docs/api/spaces-management/put.asciidoc +++ b/docs/api/spaces-management/put.asciidoc @@ -36,6 +36,9 @@ experimental[] Update an existing {kib} space. (Optional, string) Specifies the data-url encoded image to display in the space avatar. If specified, `initials` will not be displayed, and the `color` will be visible as the background color for transparent images. For best results, your image should be 64x64. Images will not be optimized by this API call, so care should be taken when using custom images. +`solution`:: + (Optional, string) The solution defined for the space. Can be one of `security`, `observability`, `search`, `classic`. + [[spaces-api-put-response-codes]] ==== Response codes diff --git a/examples/response_stream/public/mount.tsx b/examples/response_stream/public/mount.tsx index 7309abf5e0022..77eebfcd2233d 100644 --- a/examples/response_stream/public/mount.tsx +++ b/examples/response_stream/public/mount.tsx @@ -10,6 +10,7 @@ import * as React from 'react'; import { render, unmountComponentAtNode } from 'react-dom'; import { CoreSetup, CoreStart, AppMountParameters } from '@kbn/core/public'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { PLUGIN_NAME } from '../common/constants'; import { ResponseStreamStartPlugins } from './plugin'; import { App } from './containers/app'; @@ -41,9 +42,11 @@ export const mount = ]); const reactElement = ( - - - + + + + + ); render(reactElement, element); return () => unmountComponentAtNode(element); diff --git a/examples/response_stream/tsconfig.json b/examples/response_stream/tsconfig.json index 0de5b8c0df5a7..7a0b99ab1eba2 100644 --- a/examples/response_stream/tsconfig.json +++ b/examples/response_stream/tsconfig.json @@ -22,5 +22,6 @@ "@kbn/config-schema", "@kbn/shared-ux-router", "@kbn/ml-response-stream", + "@kbn/react-kibana-context-render", ] } diff --git a/packages/kbn-apm-synthtrace-client/src/lib/apm/instance.ts b/packages/kbn-apm-synthtrace-client/src/lib/apm/instance.ts index 991e5e40b6340..4b3cfde40825c 100644 --- a/packages/kbn-apm-synthtrace-client/src/lib/apm/instance.ts +++ b/packages/kbn-apm-synthtrace-client/src/lib/apm/instance.ts @@ -76,7 +76,6 @@ export class Instance extends Entity { return new ApmError({ ...this.fields, 'error.exception': [{ message, ...(type ? { type } : {}) }], - 'error.grouping_name': getErrorGroupingKey(message), 'error.culprit': culprit, }); } diff --git a/packages/kbn-apm-synthtrace/src/test/scenarios/05_transactions_with_errors.test.ts b/packages/kbn-apm-synthtrace/src/test/scenarios/05_transactions_with_errors.test.ts index a8848c1954e40..43b924d9d8a18 100644 --- a/packages/kbn-apm-synthtrace/src/test/scenarios/05_transactions_with_errors.test.ts +++ b/packages/kbn-apm-synthtrace/src/test/scenarios/05_transactions_with_errors.test.ts @@ -60,11 +60,6 @@ describe('transactions with errors', () => { .errors(instance.error({ message: 'test error' }).timestamp(timestamp)) .serialize(); - expect(error['error.grouping_name']).toEqual( - '4274b1899eba687801198c89f64a3fdade080a475c8a54881ba8fa10e7f45691' - ); - expect(error['error.grouping_key']).toMatchInlineSnapshot( - `"4274b1899eba687801198c89f64a3fdade080a475c8a54881ba8fa10e7f45691"` - ); + expect(error['error.grouping_key']).toMatchInlineSnapshot(`"0000000000000000000000test error"`); }); }); diff --git a/packages/kbn-check-mappings-update-cli/current_fields.json b/packages/kbn-check-mappings-update-cli/current_fields.json index ad653171f2707..703730a262281 100644 --- a/packages/kbn-check-mappings-update-cli/current_fields.json +++ b/packages/kbn-check-mappings-update-cli/current_fields.json @@ -931,7 +931,8 @@ ], "slo-settings": [], "space": [ - "name" + "name", + "solution" ], "spaces-usage-stats": [], "synthetics-monitor": [ diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index 6d54282cabafe..94f2148280f08 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -3062,6 +3062,9 @@ } }, "type": "text" + }, + "solution": { + "type": "keyword" } } }, diff --git a/packages/kbn-config-schema/src/helpers/offering_based_schema.ts b/packages/kbn-config-schema/src/helpers/offering_based_schema.ts index 09ddfc3a75644..b4ccaf57330f2 100644 --- a/packages/kbn-config-schema/src/helpers/offering_based_schema.ts +++ b/packages/kbn-config-schema/src/helpers/offering_based_schema.ts @@ -12,6 +12,16 @@ import { Type, TypeOptions } from '../types'; /** * Helper to apply different validations depending on whether Kibana is running the Serverless or Traditional offering. * + * @remark This utility is intended to be used for Kibana YAML-based configuration validation only! Using it in other + * contexts will lead to only `traditional` validation being used. + * + * If you want to switch schemas based on the offering in other contexts do the following: + * + * ```ts + * // env is passed to your plugin constructor + * const schema = env.packageInfo.buildFlavor === 'serverless' ? baseSchema.extend(a) : baseSchema.extend(b); + * ``` + * * @example Only allow the setting on Serverless * const config = schema.object({ * myProp: offeringBasedSchema({ serverless: schema.boolean({ defaultValue: true }) }), diff --git a/packages/kbn-esql-utils/index.ts b/packages/kbn-esql-utils/index.ts index 31fa7eb3a14c8..306d187f1ef07 100644 --- a/packages/kbn-esql-utils/index.ts +++ b/packages/kbn-esql-utils/index.ts @@ -9,6 +9,7 @@ export { getESQLAdHocDataview, getIndexPatternFromESQLQuery, + hasTransformationalCommand, getLimitFromESQLQuery, removeDropCommandsFromESQLQuery, getIndexForESQLQuery, diff --git a/packages/kbn-esql-utils/src/index.ts b/packages/kbn-esql-utils/src/index.ts index a48765e8c0489..18fc938b5eee5 100644 --- a/packages/kbn-esql-utils/src/index.ts +++ b/packages/kbn-esql-utils/src/index.ts @@ -14,6 +14,7 @@ export { getIndexPatternFromESQLQuery, getLimitFromESQLQuery, removeDropCommandsFromESQLQuery, + hasTransformationalCommand, } from './utils/query_parsing_helpers'; export { appendToESQLQuery, appendWhereClauseToESQLQuery } from './utils/append_to_query'; export { getESQLQueryColumns, getESQLQueryColumnsRaw, getESQLResults } from './utils/run_query'; diff --git a/packages/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts b/packages/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts index 9e7686127af02..3cb3c3171942d 100644 --- a/packages/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts +++ b/packages/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts @@ -10,6 +10,7 @@ import { getIndexPatternFromESQLQuery, getLimitFromESQLQuery, removeDropCommandsFromESQLQuery, + hasTransformationalCommand, } from './query_parsing_helpers'; describe('esql query helpers', () => { @@ -95,4 +96,25 @@ describe('esql query helpers', () => { ).toBe('from a | keep c '); }); }); + + describe('hasTransformationalCommand', () => { + it('should return false for non transformational command', () => { + expect(hasTransformationalCommand('from a | eval b = 1')).toBeFalsy(); + }); + + it('should return true for stats', () => { + expect(hasTransformationalCommand('from a | stats count() as total by a=b')).toBeTruthy(); + }); + + it('should return true for keep', () => { + expect(hasTransformationalCommand('from a | keep field1, field2')).toBeTruthy(); + }); + + it('should return false for commented out transformational command', () => { + expect( + hasTransformationalCommand(`from logstash-* + // | stats var0 = avg(bytes) by geo.dest`) + ).toBeFalsy(); + }); + }); }); diff --git a/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts b/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts index af6c931406bac..994551930cc5a 100644 --- a/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts +++ b/packages/kbn-esql-utils/src/utils/query_parsing_helpers.ts @@ -18,6 +18,13 @@ export function getIndexPatternFromESQLQuery(esql?: string) { return indices?.map((index) => index.text).join(','); } +// For ES|QL we consider the following commands as transformational commands +export function hasTransformationalCommand(esql?: string) { + const transformationalCommands = ['stats', 'keep', 'metrics']; + const { ast } = getAstAndSyntaxErrors(esql); + return transformationalCommands.some((command) => ast.find(({ name }) => name === command)); +} + export function getLimitFromESQLQuery(esql: string): number { const limitCommands = esql.match(new RegExp(/LIMIT\s[0-9]+/, 'ig')); if (!limitCommands) { diff --git a/packages/kbn-esql-validation-autocomplete/BUILD.bazel b/packages/kbn-esql-validation-autocomplete/BUILD.bazel index 366eaa3d1a66f..07106718615d1 100644 --- a/packages/kbn-esql-validation-autocomplete/BUILD.bazel +++ b/packages/kbn-esql-validation-autocomplete/BUILD.bazel @@ -3,6 +3,7 @@ load("@build_bazel_rules_nodejs//:index.bzl", "js_library") SRCS = glob( [ "**/*.ts", + "**/*functions.json", ], exclude = [ "**/*.config.js", diff --git a/packages/kbn-esql-validation-autocomplete/package.json b/packages/kbn-esql-validation-autocomplete/package.json index 5d3773ed082b8..892ffd6999656 100644 --- a/packages/kbn-esql-validation-autocomplete/package.json +++ b/packages/kbn-esql-validation-autocomplete/package.json @@ -5,6 +5,11 @@ "license": "SSPL-1.0 OR Elastic License 2.0", "sideEffects": false, "scripts": { - "maketests": "ts-node --transpileOnly ./scripts/generate_function_validation_tests.ts" + "make:tests": "ts-node --transpileOnly ./scripts/generate_function_validation_tests.ts", + "postmake:tests": "yarn run lint:fix", + "make:defs": "ts-node --transpileOnly ./scripts/generate_function_definitions.ts", + "postmake:defs": "yarn run lint:fix && yarn run i18n:fix", + "lint:fix": "cd ../.. && node ./scripts/eslint --fix ./packages/kbn-esql-validation-autocomplete/src/**/*.ts", + "i18n:fix": "cd ../.. && node ./scripts/i18n_check.js --fix" } } diff --git a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts new file mode 100644 index 0000000000000..b7cd905c63baf --- /dev/null +++ b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_definitions.ts @@ -0,0 +1,385 @@ +/* + * 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 { readdirSync, readFileSync } from 'fs'; +import { writeFile } from 'fs/promises'; +import { join } from 'path'; +import _ from 'lodash'; +import type { RecursivePartial } from '@kbn/utility-types'; +import { FunctionDefinition, supportedFieldTypes } from '../src/definitions/types'; + +const aliasTable: Record = { + to_version: ['to_ver'], + to_unsigned_long: ['to_ul', 'to_ulong'], + to_boolean: ['to_bool'], + to_string: ['to_str'], + to_datetime: ['to_dt'], + to_double: ['to_dbl'], + to_integer: ['to_int'], +}; +const aliases = new Set(Object.values(aliasTable).flat()); + +const evalSupportedCommandsAndOptions = { + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], +}; + +const excludedFunctions = new Set(['bucket', 'case']); + +const extraFunctions: FunctionDefinition[] = [ + { + type: 'eval', + name: 'case', + description: + 'Accepts pairs of conditions and values. The function returns the value that belongs to the first condition that evaluates to `true`. If the number of arguments is odd, the last argument is the default value which is returned when no condition matches.', + ...evalSupportedCommandsAndOptions, + signatures: [ + { + params: [ + { name: 'condition', type: 'boolean' }, + { name: 'value', type: 'any' }, + ], + minParams: 2, + returnType: 'any', + }, + ], + examples: [ + `from index | eval type = case(languages <= 1, "monolingual", languages <= 2, "bilingual", "polyglot")`, + ], + }, +]; + +const elasticsearchToKibanaType = (elasticsearchType: string) => { + if ( + [ + 'double', + 'unsigned_long', + 'long', + 'integer', + 'counter_integer', + 'counter_long', + 'counter_double', + ].includes(elasticsearchType) + ) { + return 'number'; + } + + if (['text', 'keyword'].includes(elasticsearchType)) { + return 'string'; + } + + if (['datetime', 'time_duration'].includes(elasticsearchType)) { + return 'date'; + } + + if (elasticsearchType === 'date_period') { + return 'time_literal'; // TODO - consider aligning with Elasticsearch + } + + return elasticsearchType; +}; + +const validateLogFunctions = `(fnDef: ESQLFunction) => { + const messages = []; + // do not really care here about the base and field + // just need to check both values are not negative + for (const arg of fnDef.args) { + if (isLiteralItem(arg) && arg.value < 0) { + messages.push({ + type: 'warning' as const, + code: 'logOfNegativeValue', + text: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.divide.warning.logOfNegativeValue', + { + defaultMessage: 'Log of a negative number results in null: {value}', + values: { + value: arg.value, + }, + } + ), + location: arg.location, + }); + } + } + return messages; +}`; + +const dateDiffSuggestions = [ + 'year', + 'quarter', + 'month', + 'week', + 'day', + 'hour', + 'minute', + 'second', + 'millisecond', + 'microsecond', + 'nanosecond', +]; + +const dateDiffOptions = [ + 'year', + 'years', + 'yy', + 'yyyy', + 'quarter', + 'quarters', + 'qq', + 'q', + 'month', + 'months', + 'mm', + 'm', + 'dayofyear', + 'dy', + 'y', + 'day', + 'days', + 'dd', + 'd', + 'week', + 'weeks', + 'wk', + 'ww', + 'weekday', + 'weekdays', + 'dw', + 'hour', + 'hours', + 'hh', + 'minute', + 'minutes', + 'mi', + 'n', + 'second', + 'seconds', + 'ss', + 's', + 'millisecond', + 'milliseconds', + 'ms', + 'microsecond', + 'microseconds', + 'mcs', + 'nanosecond', + 'nanoseconds', + 'ns', +]; + +/** + * Enrichments for function definitions + * + * This is the place to put information that is not provided by Elasticsearch + * and, hence, won't be present in the JSON file. + */ +const functionEnrichments: Record> = { + log10: { + validate: validateLogFunctions, + }, + log: { + validate: validateLogFunctions, + }, + date_diff: { + signatures: [ + { + params: [{ literalOptions: dateDiffOptions, literalSuggestions: dateDiffSuggestions }], + }, + ], + }, + date_extract: { + signatures: [ + { + // override the first param as type chrono_literal + params: [{ type: 'chrono_literal' }], + }, + ], + }, + date_trunc: { + signatures: [ + { + // override the first param to be of type time_literal + params: [{ type: 'time_literal' }], + }, + ], + }, + mv_sort: { + signatures: new Array(6).fill({ + params: [{}, { literalOptions: ['asc', 'desc'] }], + }), + }, + // can be removed when https://github.com/elastic/elasticsearch/issues/108982 is complete + coalesce: { + signatures: supportedFieldTypes + .map((type) => [ + { + params: [ + { + name: 'first', + type, + optional: false, + }, + ], + returnType: type, + minParams: 1, + }, + { + params: [ + { + name: 'first', + type, + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: type, + minParams: 1, + }, + ]) + .flat(), + }, + // can be removed when https://github.com/elastic/elasticsearch/issues/108982 is complete + mv_dedupe: { + signatures: supportedFieldTypes.map((type) => ({ + params: [ + { + name: 'field', + type, + optional: false, + }, + ], + returnType: type, + })), + }, +}; + +/** + * Builds a function definition object from a row of the "meta functions" table + * @param {Array} value — the row of the "meta functions" table, corresponding to a single function definition + * @param {*} columnIndices — the indices of the columns in the "meta functions" table + * @returns + */ +function getFunctionDefinition(ESFunctionDefinition: Record): FunctionDefinition { + const ret = { + type: ESFunctionDefinition.type, + name: ESFunctionDefinition.name, + ...(ESFunctionDefinition.type === 'eval' + ? evalSupportedCommandsAndOptions + : { supportedCommands: ['stats'] }), + description: ESFunctionDefinition.description, + alias: aliasTable[ESFunctionDefinition.name], + signatures: _.uniqBy( + ESFunctionDefinition.signatures.map((signature: any) => ({ + ...signature, + params: signature.params.map((param: any) => ({ + ...param, + type: elasticsearchToKibanaType(param.type), + description: undefined, + })), + returnType: elasticsearchToKibanaType(signature.returnType), + variadic: undefined, // we don't support variadic property + minParams: signature.variadic + ? signature.params.filter((param: any) => !param.optional).length + : undefined, + })), + (el) => JSON.stringify(el) + ), + examples: ESFunctionDefinition.examples, + }; + + if (functionEnrichments[ret.name]) { + _.merge(ret, functionEnrichments[ret.name]); + } + + return ret as FunctionDefinition; +} + +function printGeneratedFunctionsFile(functionDefinitions: FunctionDefinition[]) { + const removeInlineAsciiDocLinks = (asciidocString: string) => { + const inlineLinkRegex = /\{.+?\}\/.+?\[(.+?)\]/g; + return asciidocString.replace(inlineLinkRegex, '$1'); + }; + + const getDefinitionName = (name: string) => _.camelCase(`${name}Definition`); + + const printFunctionDefinition = (functionDefinition: FunctionDefinition) => { + const { type, name, description, alias, signatures } = functionDefinition; + + return `const ${getDefinitionName(name)}: FunctionDefinition = { + type: '${type}', + name: '${name}', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.${name}', { defaultMessage: ${JSON.stringify( + removeInlineAsciiDocLinks(description) + )} }), + alias: ${alias ? `['${alias.join("', '")}']` : 'undefined'}, + signatures: ${JSON.stringify(signatures, null, 2)}, + supportedCommands: ${JSON.stringify(functionDefinition.supportedCommands)}, + supportedOptions: ${JSON.stringify(functionDefinition.supportedOptions)}, + validate: ${functionDefinition.validate || 'undefined'}, + examples: ${JSON.stringify(functionDefinition.examples || [])}, +}`; + }; + + const fileHeader = `// NOTE: This file is generated by the generate_function_definitions.js script +// Do not edit it manually + +import type { ESQLFunction } from '@kbn/esql-ast'; +import { i18n } from '@kbn/i18n'; +import { isLiteralItem } from '../shared/helpers'; +import type { FunctionDefinition } from './types'; + + +`; + + const functionDefinitionsString = functionDefinitions.map(printFunctionDefinition).join('\n\n'); + + const fileContents = `${fileHeader}${functionDefinitionsString} + export const evalFunctionDefinitions = [${functionDefinitions + .map(({ name }) => getDefinitionName(name)) + .join(',\n')}];`; + + return fileContents; +} + +(async function main() { + const pathToElasticsearch = process.argv[2]; + + const ESFunctionDefinitionsDirectory = join( + __dirname, + pathToElasticsearch, + 'docs/reference/esql/functions/kibana/definition' + ); + + // read all ES function definitions (the directory is full of JSON files) and create an array of definitions + const ESFunctionDefinitions = readdirSync(ESFunctionDefinitionsDirectory).map((file) => + JSON.parse(readFileSync(`${ESFunctionDefinitionsDirectory}/${file}`, 'utf-8')) + ); + + const evalFunctionDefinitions: FunctionDefinition[] = []; + // const aggFunctionDefinitions = []; + for (const ESDefinition of ESFunctionDefinitions) { + if (aliases.has(ESDefinition.name) || excludedFunctions.has(ESDefinition.name)) { + continue; + } + + const functionDefinition = getFunctionDefinition(ESDefinition); + + evalFunctionDefinitions.push(functionDefinition); + } + + evalFunctionDefinitions.push(...extraFunctions); + + await writeFile( + join(__dirname, '../src/definitions/functions.ts'), + printGeneratedFunctionsFile(evalFunctionDefinitions) + ); +})(); diff --git a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts index 2b68d96a4195c..bcf11337117f4 100644 --- a/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts +++ b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts @@ -7,22 +7,30 @@ */ import { readFileSync, writeFileSync } from 'fs'; -import { camelCase } from 'lodash'; import { join } from 'path'; import * as recast from 'recast'; +import { camelCase } from 'lodash'; +import { getParamAtPosition } from '../src/autocomplete/helper'; import { statsAggregationFunctionDefinitions } from '../src/definitions/aggs'; -import { evalFunctionsDefinitions } from '../src/definitions/functions'; +import { evalFunctionDefinitions } from '../src/definitions/functions'; import { groupingFunctionDefinitions } from '../src/definitions/grouping'; import { getFunctionSignatures } from '../src/definitions/helpers'; import { chronoLiterals, timeLiterals } from '../src/definitions/literals'; -import { FunctionDefinition } from '../src/definitions/types'; import { nonNullable } from '../src/shared/helpers'; +import { + SupportedFieldType, + FunctionDefinition, + supportedFieldTypes, + isSupportedFieldType, +} from '../src/definitions/types'; import { FUNCTION_DESCRIBE_BLOCK_NAME } from '../src/validation/function_describe_block_name'; +export const fieldNameFromType = (type: SupportedFieldType) => `${camelCase(type)}Field`; + function main() { const testCasesByFunction: Map> = new Map(); - for (const definition of evalFunctionsDefinitions) { + for (const definition of evalFunctionDefinitions) { testCasesByFunction.set(definition.name, generateTestsForEvalFunction(definition)); } @@ -131,26 +139,27 @@ function generateRowCommandTestsForEvalFunction( ); testCases.set(`row var = ${signatureString}`, []); - - const { wrongFieldMapping, expectedErrors } = generateIncorrectlyTypedParameters( - name, - signatures, - params, - { - stringField: '"a"', - numberField: '5', - booleanField: 'true', - } - ); - const wrongSignatureString = tweakSignatureForRowCommand( - getFunctionSignatures( - { name, ...defRest, signatures: [{ params: wrongFieldMapping, ...signRest }] }, - { withTypes: false } - )[0].declaration - ); - testCases.set(`row var = ${wrongSignatureString}`, expectedErrors); } } + + // Test the parameter type checking + const signatureWithMostParams = signatures.reduce((acc, curr) => + acc.params.length > curr.params.length ? acc : curr + ); + + const { wrongFieldMapping, expectedErrors } = generateIncorrectlyTypedParameters( + name, + signatures, + signatureWithMostParams.params, + supportedTypesAndConstants + ); + const wrongSignatureString = tweakSignatureForRowCommand( + getFunctionSignatures( + { name, ...defRest, signatures: [{ ...signatureWithMostParams, params: wrongFieldMapping }] }, + { withTypes: false } + )[0].declaration + ); + testCases.set(`row var = ${wrongSignatureString}`, expectedErrors); } function generateWhereCommandTestsForEvalFunction( @@ -195,7 +204,7 @@ function generateWhereCommandTestsForEvalFunction( name, signatures, params, - { stringField: 'stringField', numberField: 'numberField', booleanField: 'booleanField' } + supportedTypesAndFieldNames ); testCases.set( `from a_index | where ${returnType !== 'number' ? 'length(' : ''}${ @@ -349,11 +358,7 @@ function generateEvalCommandTestsForEvalFunction( name, signatures, params, - { - stringField: 'stringField', - numberField: 'numberField', - booleanField: 'booleanField', - } + supportedTypesAndFieldNames ); testCases.set( `from a_index | eval ${ @@ -364,50 +369,6 @@ function generateEvalCommandTestsForEvalFunction( }`, expectedErrors ); - - if (!signRest.minParams) { - // test that additional args are spotted - const fieldMappingWithOneExtraArg = getFieldMapping(params).concat({ - name: 'extraArg', - type: 'number', - }); - const refSignature = signatures[0]; - // get the expected args from the first signature in case of errors - const minNumberOfArgs = refSignature.params.filter(({ optional }) => !optional).length; - const fullNumberOfArgs = refSignature.params.length; - const hasOptionalArgs = minNumberOfArgs < fullNumberOfArgs; - const hasTooManyArgs = fieldMappingWithOneExtraArg.length > fullNumberOfArgs; - - // the validation engine tries to be smart about signatures with optional args - let messageQuantifier = 'exactly '; - if (hasOptionalArgs && hasTooManyArgs) { - messageQuantifier = 'no more than '; - } - if (!hasOptionalArgs && !hasTooManyArgs) { - messageQuantifier = 'at least '; - } - testCases.set( - `from a_index | eval ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMappingWithOneExtraArg, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }`, - [ - `Error: [${name}] function expects ${messageQuantifier}${ - fullNumberOfArgs === 1 - ? 'one argument' - : fullNumberOfArgs === 0 - ? '0 arguments' - : `${fullNumberOfArgs} arguments` - }, got ${fieldMappingWithOneExtraArg.length}.`, - ] - ); - } } // test that wildcard won't work as arg @@ -430,6 +391,79 @@ function generateEvalCommandTestsForEvalFunction( ); } } + + // test that the function can have too many args + if (signatures.some(({ minParams }) => minParams)) { + // at least one signature is variadic, so no way + // to have too many arguments + return; + } + + // test that additional args are spotted + + const getNumberOfParams = (signature: FunctionDefinition['signatures'][number]) => ({ + all: signature.params.length, + required: signature.params.filter(({ optional }) => !optional).length, + }); + + // get the signature with the greatest number of params + const [first, ...rest] = signatures; + let signatureWithGreatestNumberOfParams = first; + let { all: maxNumberOfArgs, required: minNumberOfArgs } = getNumberOfParams(first); + + for (const signature of rest) { + const numberOfParams = signature.params.length; + if (numberOfParams > signatureWithGreatestNumberOfParams.params.length) { + signatureWithGreatestNumberOfParams = signature; + } + + maxNumberOfArgs = Math.max(maxNumberOfArgs, numberOfParams); + const numberOfRequiredParams = signature.params.filter(({ optional }) => !optional).length; + minNumberOfArgs = Math.min(minNumberOfArgs, numberOfRequiredParams); + } + + const fieldMappingWithOneExtraArg = getFieldMapping( + signatureWithGreatestNumberOfParams.params + ).concat({ + name: 'extraArg', + type: 'number', + }); + + // get the expected args from the first signature in case of errors + const hasOptionalArgs = minNumberOfArgs < maxNumberOfArgs; + const hasTooManyArgs = fieldMappingWithOneExtraArg.length > maxNumberOfArgs; + + // the validation engine tries to be smart about signatures with optional args + let messageQuantifier = 'exactly '; + if (hasOptionalArgs && hasTooManyArgs) { + messageQuantifier = 'no more than '; + } + if (!hasOptionalArgs && !hasTooManyArgs) { + messageQuantifier = 'at least '; + } + testCases.set( + `from a_index | eval ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [ + { ...signatureWithGreatestNumberOfParams, params: fieldMappingWithOneExtraArg }, + ], + }, + { withTypes: false } + )[0].declaration + }`, + [ + `Error: [${name}] function expects ${messageQuantifier}${ + maxNumberOfArgs === 1 + ? 'one argument' + : maxNumberOfArgs === 0 + ? '0 arguments' + : `${maxNumberOfArgs} arguments` + }, got ${fieldMappingWithOneExtraArg.length}.`, + ] + ); } function generateEvalCommandTestsForAggFunction( @@ -680,11 +714,7 @@ function generateStatsCommandTestsForAggFunction( name, signatures, params, - { - stringField: 'stringField', - numberField: 'numberField', - booleanField: 'booleanField', - } + supportedTypesAndFieldNames ); // and the message is case of wrong argument type is passed testCases.set( @@ -818,18 +848,28 @@ function generateSortCommandTestsForAggFunction( const generateSortCommandTestsForGroupingFunction = generateSortCommandTestsForAggFunction; -const fieldTypes = [ - 'number', - 'date', - 'boolean', - 'version', - 'ip', - 'string', - 'cartesian_point', - 'cartesian_shape', - 'geo_point', - 'geo_shape', -]; +const fieldTypesToConstants: Record = { + string: '"a"', + number: '5', + date: 'now()', + boolean: 'true', + version: 'to_version("1.0.0")', + ip: 'to_ip("127.0.0.1")', + geo_point: 'to_geopoint("POINT (30 10)")', + geo_shape: 'to_geoshape("POINT (30 10)")', + cartesian_point: 'to_cartesianpoint("POINT (30 10)")', + cartesian_shape: 'to_cartesianshape("POINT (30 10)")', +}; + +const supportedTypesAndFieldNames = supportedFieldTypes.map((type) => ({ + name: fieldNameFromType(type), + type, +})); + +const supportedTypesAndConstants = supportedFieldTypes.map((type) => ({ + name: fieldTypesToConstants[type], + type, +})); function prepareNestedFunction(fnSignature: FunctionDefinition): string { return getFunctionSignatures( @@ -848,28 +888,36 @@ function prepareNestedFunction(fnSignature: FunctionDefinition): string { const toAvgSignature = statsAggregationFunctionDefinitions.find(({ name }) => name === 'avg')!; -const toInteger = evalFunctionsDefinitions.find(({ name }) => name === 'to_integer')!; -const toStringSignature = evalFunctionsDefinitions.find(({ name }) => name === 'to_string')!; -const toDateSignature = evalFunctionsDefinitions.find(({ name }) => name === 'to_datetime')!; -const toBooleanSignature = evalFunctionsDefinitions.find(({ name }) => name === 'to_boolean')!; -const toIpSignature = evalFunctionsDefinitions.find(({ name }) => name === 'to_ip')!; -const toGeoPointSignature = evalFunctionsDefinitions.find(({ name }) => name === 'to_geopoint')!; -const toCartesianPointSignature = evalFunctionsDefinitions.find( +const toInteger = evalFunctionDefinitions.find(({ name }) => name === 'to_integer')!; +const toStringSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_string')!; +const toDateSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_datetime')!; +const toBooleanSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_boolean')!; +const toIpSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_ip')!; +const toGeoPointSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_geopoint')!; +const toGeoShapeSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_geoshape')!; +const toCartesianPointSignature = evalFunctionDefinitions.find( ({ name }) => name === 'to_cartesianpoint' )!; +const toCartesianShapeSignature = evalFunctionDefinitions.find( + ({ name }) => name === 'to_cartesianshape' +)!; +const toVersionSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_version')!; -const nestedFunctions = { +const nestedFunctions: Record = { number: prepareNestedFunction(toInteger), string: prepareNestedFunction(toStringSignature), date: prepareNestedFunction(toDateSignature), boolean: prepareNestedFunction(toBooleanSignature), ip: prepareNestedFunction(toIpSignature), + version: prepareNestedFunction(toVersionSignature), geo_point: prepareNestedFunction(toGeoPointSignature), + geo_shape: prepareNestedFunction(toGeoShapeSignature), cartesian_point: prepareNestedFunction(toCartesianPointSignature), + cartesian_shape: prepareNestedFunction(toCartesianShapeSignature), }; function getFieldName( - typeString: string, + typeString: SupportedFieldType, { useNestedFunction, isStats }: { useNestedFunction: boolean; isStats: boolean } ) { if (useNestedFunction && isStats) { @@ -877,7 +925,7 @@ function getFieldName( } return useNestedFunction && typeString in nestedFunctions ? nestedFunctions[typeString as keyof typeof nestedFunctions] - : `${camelCase(typeString)}Field`; + : fieldNameFromType(typeString); } const literals = { @@ -902,21 +950,16 @@ function getMultiValue(type: string) { return `[true, false]`; } -function tweakSignatureForRowCommand(signature: string) { +function tweakSignatureForRowCommand(signature: string): string { /** * row has no access to any field, so replace it with literal * or functions (for dates) */ - return signature - .replace(/numberField/g, '5') - .replace(/stringField/g, '"a"') - .replace(/dateField/g, 'now()') - .replace(/booleanField/g, 'true') - .replace(/ipField/g, 'to_ip("127.0.0.1")') - .replace(/geoPointField/g, 'to_geopoint("POINT (30 10)")') - .replace(/geoShapeField/g, 'to_geoshape("POINT (30 10)")') - .replace(/cartesianPointField/g, 'to_cartesianpoint("POINT (30 10)")') - .replace(/cartesianShapeField/g, 'to_cartesianshape("POINT (30 10)")'); + let ret = signature; + for (const [type, value] of Object.entries(fieldTypesToConstants)) { + ret = ret.replace(new RegExp(fieldNameFromType(type as SupportedFieldType), 'g'), value); + } + return ret; } function getFieldMapping( @@ -933,7 +976,7 @@ function getFieldMapping( }; return params.map(({ name: _name, type, constantOnly, literalOptions, ...rest }) => { const typeString: string = type; - if (fieldTypes.includes(typeString)) { + if (isSupportedFieldType(typeString)) { if (useLiterals && literalOptions) { return { name: `"${literalOptions[0]}"`, @@ -977,48 +1020,68 @@ function generateIncorrectlyTypedParameters( name: string, signatures: FunctionDefinition['signatures'], currentParams: FunctionDefinition['signatures'][number]['params'], - values: { stringField: string; numberField: string; booleanField: string } + availableFields: Array<{ name: string; type: SupportedFieldType }> ) { const literalValues = { string: `"a"`, number: '5', }; const wrongFieldMapping = currentParams.map( - ({ name: _name, constantOnly, literalOptions, type, ...rest }, i) => { + ({ name: paramName, constantOnly, literalOptions, type, ...rest }, i) => { // this thing is complex enough, let's not make it harder for constants if (constantOnly) { return { name: literalValues[type as keyof typeof literalValues], type, + actualType: type, wrong: false, ...rest, }; } - const canBeFieldButNotString = Boolean( - fieldTypes.filter((t) => t !== 'string').includes(type) && - signatures.every(({ params: fnParams }) => fnParams[i].type !== 'string') - ); - const canBeFieldButNotNumber = - fieldTypes.filter((t) => t !== 'number').includes(type) && - signatures.every(({ params: fnParams }) => fnParams[i].type !== 'number'); - const isLiteralType = /literal$/.test(type); - // pick a field name purposely wrong - const nameValue = - canBeFieldButNotString || isLiteralType - ? values.stringField - : canBeFieldButNotNumber - ? values.numberField - : values.booleanField; - return { name: nameValue, type, wrong: true, ...rest }; + + if (type !== 'any') { + // try to find an unacceptable field + const unacceptableField: { name: string; type: SupportedFieldType } | undefined = + availableFields + // sort to make the test deterministic + .sort((a, b) => a.type.localeCompare(b.type)) + .find(({ type: fieldType }) => + signatures.every((signature) => getParamAtPosition(signature, i)?.type !== fieldType) + ); + + if (unacceptableField) { + return { + name: unacceptableField.name, + type, + actualType: unacceptableField.type, + wrong: true, + ...rest, + }; + } + } + + // failed to find a bad field... they must all be acceptable + const acceptableField: { name: string; type: SupportedFieldType } | undefined = + type === 'any' + ? availableFields[0] + : availableFields.find(({ type: fieldType }) => fieldType === type); + + if (!acceptableField) { + throw new Error( + `Unable to find an acceptable field for type ${type}... this should never happen` + ); + } + + return { + name: acceptableField.name, + type: acceptableField.type, + actualType: acceptableField.type, + wrong: false, + ...rest, + }; } ); - const generatedFieldTypes = { - [values.stringField]: 'string', - [values.numberField]: 'number', - [values.booleanField]: 'boolean', - }; - // Try to predict which signature will be used to generate the errors // in the validation engine. The validator currently uses the signature // which generates the fewest errors. @@ -1027,12 +1090,15 @@ function generateIncorrectlyTypedParameters( // // This is not future-proof... const misMatchesBySignature = signatures.map(({ params: fnParams }) => { + if (fnParams.length !== wrongFieldMapping.length) { + return Infinity; + } const typeMatches = fnParams.map(({ type }, i) => { if (wrongFieldMapping[i].wrong) { - const typeFromIncorrectMapping = generatedFieldTypes[wrongFieldMapping[i].name]; + const typeFromIncorrectMapping = wrongFieldMapping[i].actualType; return type === typeFromIncorrectMapping; } - return type === wrongFieldMapping[i].type; + return type === wrongFieldMapping[i].actualType; }); return typeMatches.filter((t) => !t).length; })!; @@ -1042,14 +1108,17 @@ function generateIncorrectlyTypedParameters( const expectedErrors = signatureToUse.params .filter(({ constantOnly }) => !constantOnly) .map(({ type }, i) => { + if (!wrongFieldMapping[i].wrong) { + return; + } const fieldName = wrongFieldMapping[i].name; if ( fieldName === 'numberField' && - signatures.every(({ params: fnParams }) => fnParams[i].type !== 'string') + signatures.every((signature) => getParamAtPosition(signature, i)?.type !== 'string') ) { return; } - return `Argument of [${name}] must be [${type}], found value [${fieldName}] type [${generatedFieldTypes[fieldName]}]`; + return `Argument of [${name}] must be [${type}], found value [${fieldName}] type [${wrongFieldMapping[i].actualType}]`; }) .filter(nonNullable); diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts index 3e68887c86f39..efff60c382d34 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts @@ -7,7 +7,7 @@ */ import { suggest } from './autocomplete'; -import { evalFunctionsDefinitions } from '../definitions/functions'; +import { evalFunctionDefinitions } from '../definitions/functions'; import { builtinFunctions } from '../definitions/builtin'; import { statsAggregationFunctionDefinitions } from '../definitions/aggs'; import { chronoLiterals, timeLiterals } from '../definitions/literals'; @@ -17,6 +17,8 @@ import { camelCase, partition } from 'lodash'; import { getAstAndSyntaxErrors } from '@kbn/esql-ast'; import { groupingFunctionDefinitions } from '../definitions/grouping'; import { FunctionArgSignature } from '../definitions/types'; +import { getParamAtPosition } from './helper'; +import { nonNullable } from '../shared/helpers'; import { METADATA_FIELDS } from '../shared/constants'; const triggerCharacters = [',', '(', '=', ' ']; @@ -118,7 +120,7 @@ function getFunctionSignaturesByReturnType( } // eval functions (eval is a special keyword in JS) if (evalMath) { - list.push(...evalFunctionsDefinitions); + list.push(...evalFunctionDefinitions); } if (builtin) { list.push(...builtinFunctions.filter(({ name }) => (skipAssign ? name !== '=' : true))); @@ -1129,22 +1131,27 @@ describe('autocomplete', () => { ); // Test suggestions for each possible param, within each signature variation, for each function - for (const fn of evalFunctionsDefinitions) { + for (const fn of evalFunctionDefinitions) { // skip this fn for the moment as it's quite hard to test if (fn.name !== 'bucket') { for (const signature of fn.signatures) { signature.params.forEach((param, i) => { if (i < signature.params.length) { - const canHaveMoreArgs = - i + 1 < (signature.minParams ?? 0) || - signature.params.filter(({ optional }, j) => !optional && j > i).length > 0; + // This ref signature thing is probably wrong in a few cases, but it matches + // the logic in getFunctionArgsSuggestions. They should both be updated + const refSignature = fn.signatures[0]; + const requiresMoreArgs = + i + 1 < (refSignature.minParams ?? 0) || + refSignature.params.filter(({ optional }, j) => !optional && j > i).length > 0; - const allParamDefs = fn.signatures.map((s) => s.params[i]); + const allParamDefs = fn.signatures + .map((s) => getParamAtPosition(s, i)) + .filter(nonNullable); // get all possible types for this param const [constantOnlyParamDefs, acceptsFieldParamDefs] = partition( allParamDefs, - (p) => p.constantOnly || /_literal/.test(param.type) + (p) => p.constantOnly || /_literal/.test(p.type) ); const getTypesFromParamDefs = (paramDefs: FunctionArgSignature[]) => @@ -1155,10 +1162,10 @@ describe('autocomplete', () => { testSuggestions( `from a | eval ${fn.name}(${Array(i).fill('field').join(', ')}${i ? ',' : ''} )`, suggestedConstants?.length - ? suggestedConstants.map((option) => `"${option}"${canHaveMoreArgs ? ',' : ''}`) + ? suggestedConstants.map((option) => `"${option}"${requiresMoreArgs ? ',' : ''}`) : [ ...getFieldNamesByType(getTypesFromParamDefs(acceptsFieldParamDefs)).map( - (f) => (canHaveMoreArgs ? `${f},` : f) + (f) => (requiresMoreArgs ? `${f},` : f) ), ...getFunctionSignaturesByReturnType( 'eval', @@ -1166,9 +1173,9 @@ describe('autocomplete', () => { { evalMath: true }, undefined, [fn.name] - ).map((l) => (canHaveMoreArgs ? `${l},` : l)), + ).map((l) => (requiresMoreArgs ? `${l},` : l)), ...getLiteralsByType(getTypesFromParamDefs(constantOnlyParamDefs)).map((d) => - canHaveMoreArgs ? `${d},` : d + requiresMoreArgs ? `${d},` : d ), ] ); @@ -1177,10 +1184,10 @@ describe('autocomplete', () => { i ? ',' : '' } )`, suggestedConstants?.length - ? suggestedConstants.map((option) => `"${option}"${canHaveMoreArgs ? ',' : ''}`) + ? suggestedConstants.map((option) => `"${option}"${requiresMoreArgs ? ',' : ''}`) : [ ...getFieldNamesByType(getTypesFromParamDefs(acceptsFieldParamDefs)).map( - (f) => (canHaveMoreArgs ? `${f},` : f) + (f) => (requiresMoreArgs ? `${f},` : f) ), ...getFunctionSignaturesByReturnType( 'eval', @@ -1188,9 +1195,9 @@ describe('autocomplete', () => { { evalMath: true }, undefined, [fn.name] - ).map((l) => (canHaveMoreArgs ? `${l},` : l)), + ).map((l) => (requiresMoreArgs ? `${l},` : l)), ...getLiteralsByType(getTypesFromParamDefs(constantOnlyParamDefs)).map((d) => - canHaveMoreArgs ? `${d},` : d + requiresMoreArgs ? `${d},` : d ), ] ); @@ -1236,7 +1243,13 @@ describe('autocomplete', () => { ]); testSuggestions( 'from a | eval var0=date_trunc()', - [...getLiteralsByType('time_literal').map((t) => `${t},`)], + [ + ...getLiteralsByType('time_literal').map((t) => `${t},`), + ...getFunctionSignaturesByReturnType('eval', 'date', { evalMath: true }, undefined, [ + 'date_trunc', + ]).map((t) => `${t},`), + ...getFieldNamesByType('date').map((t) => `${t},`), + ], '(' ); testSuggestions('from a | eval var0=date_trunc(2 )', [ diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts index cc16a8d8c7699..2d0c2cd9e757e 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts @@ -80,7 +80,11 @@ import { getSourcesHelper, } from '../shared/resources_helpers'; import { ESQLCallbacks } from '../shared/types'; -import { getFunctionsToIgnoreForStats, isAggFunctionUsedAlready } from './helper'; +import { + getFunctionsToIgnoreForStats, + getParamAtPosition, + isAggFunctionUsedAlready, +} from './helper'; import { FunctionArgSignature } from '../definitions/types'; type GetSourceFn = () => Promise; @@ -1082,6 +1086,7 @@ async function getFunctionArgsSuggestions( const arg = node.args[argIndex]; // the first signature is used as reference + // TODO - take into consideration all signatures that match the current args const refSignature = fnDefinition.signatures[0]; const hasMoreMandatoryArgs = @@ -1182,13 +1187,7 @@ async function getFunctionArgsSuggestions( * for the current parameter position in the given function definition, */ const allParamDefinitionsForThisPosition = validSignatures - .map((signature) => - signature.params.length > argIndex - ? signature.params[argIndex] - : signature.minParams - ? signature.params[signature.params.length - 1] - : null - ) + .map((signature) => getParamAtPosition(signature, argIndex)) .filter(nonNullable); // Separate the param definitions into two groups: diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/documentation_util.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/documentation_util.ts index 0e46046320430..692ac590e8c46 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/documentation_util.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/documentation_util.ts @@ -26,8 +26,8 @@ const examplesLabel = i18n.translate( export const buildFunctionDocumentation = ( signatures: Array<{ declaration: string; - examples?: string[]; - }> + }>, + examples: string[] | undefined ) => ` --- \ @@ -41,28 +41,23 @@ ${signatures ` ) .join('\n\n')} + ${ + examples?.length + ? `\ --- -${ - signatures.some((examples) => examples) - ? `\ ***${examplesLabel}*** \ -${signatures - .filter(({ examples }) => examples) - .map( - ({ examples }) => ` - ${examples! + ${examples .map( (i) => ` - - \`\`${i}\`\`) + - \`\`${i}\`\` ` ) .join('')} ` - )}` - : '' -}`; + : '' + }`; /** @internal **/ export const buildDocumentation = (declaration: string, examples?: string[]) => ` diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts index 481399edfb4d5..4b2e74729db78 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts @@ -10,7 +10,7 @@ import { i18n } from '@kbn/i18n'; import { SuggestionRawDefinition } from './types'; import { groupingFunctionDefinitions } from '../definitions/grouping'; import { statsAggregationFunctionDefinitions } from '../definitions/aggs'; -import { evalFunctionsDefinitions } from '../definitions/functions'; +import { evalFunctionDefinitions } from '../definitions/functions'; import { getFunctionSignatures, getCommandSignature } from '../definitions/helpers'; import { chronoLiterals, timeLiterals } from '../definitions/literals'; import { @@ -24,7 +24,7 @@ import { buildDocumentation, buildFunctionDocumentation } from './documentation_ import { DOUBLE_BACKTICK, SINGLE_TICK_REGEX } from '../shared/constants'; const allFunctions = statsAggregationFunctionDefinitions - .concat(evalFunctionsDefinitions) + .concat(evalFunctionDefinitions) .concat(groupingFunctionDefinitions); export const TRIGGER_SUGGESTION_COMMAND = { @@ -47,7 +47,7 @@ export function getSuggestionFunctionDefinition(fn: FunctionDefinition): Suggest kind: 'Function', detail: fn.description, documentation: { - value: buildFunctionDocumentation(fullSignatures), + value: buildFunctionDocumentation(fullSignatures, fn.examples), }, // agg functgions have priority over everything else sortText: fn.type === 'agg' ? '1A' : 'C', diff --git a/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts b/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts index 11b853c2d3cf0..c52c18b822068 100644 --- a/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts +++ b/packages/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts @@ -7,6 +7,7 @@ */ import type { ESQLAstItem, ESQLCommand, ESQLFunction } from '@kbn/esql-ast'; +import { FunctionDefinition } from '../definitions/types'; import { getFunctionDefinition, isAssignment, isFunctionItem } from '../shared/helpers'; function extractFunctionArgs(args: ESQLAstItem[]): ESQLFunction[] { @@ -37,3 +38,20 @@ export function getFunctionsToIgnoreForStats(command: ESQLCommand, argIndex: num const arg = command.args[argIndex]; return isFunctionItem(arg) ? getFnContent(arg) : []; } + +/** + * Given a function signature, returns the parameter at the given position. + * + * Takes into account variadic functions (minParams), returning the last + * parameter if the position is greater than the number of parameters. + * + * @param signature + * @param position + * @returns + */ +export function getParamAtPosition( + { params, minParams }: FunctionDefinition['signatures'][number], + position: number +) { + return params.length > position ? params[position] : minParams ? params[params.length - 1] : null; +} diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts index cafaf2d09fa97..2d20b871e251b 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/aggs.ts @@ -41,12 +41,12 @@ function createNumericAggDefinition({ })), ], returnType: 'number', - examples: [ - `from index | stats result = ${name}(field${extraParamsExample})`, - `from index | stats ${name}(field${extraParamsExample})`, - ], }, ], + examples: [ + `from index | stats result = ${name}(field${extraParamsExample})`, + `from index | stats ${name}(field${extraParamsExample})`, + ], }; } @@ -103,14 +103,13 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ { params: [{ name: 'column', type: 'number', noNestingFunctions: true }], returnType: 'number', - examples: [`from index | stats result = max(field)`, `from index | stats max(field)`], }, { params: [{ name: 'column', type: 'date', noNestingFunctions: true }], returnType: 'number', - examples: [`from index | stats result = max(field)`, `from index | stats max(field)`], }, ], + examples: [`from index | stats result = max(field)`, `from index | stats max(field)`], }, { name: 'min', @@ -123,14 +122,13 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ { params: [{ name: 'column', type: 'number', noNestingFunctions: true }], returnType: 'number', - examples: [`from index | stats result = min(field)`, `from index | stats min(field)`], }, { params: [{ name: 'column', type: 'date', noNestingFunctions: true }], returnType: 'number', - examples: [`from index | stats result = min(field)`, `from index | stats min(field)`], }, ], + examples: [`from index | stats result = min(field)`, `from index | stats min(field)`], }, ]) .concat([ @@ -153,9 +151,9 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ }, ], returnType: 'number', - examples: [`from index | stats result = count(field)`, `from index | stats count(field)`], }, ], + examples: [`from index | stats result = count(field)`, `from index | stats count(field)`], }, { name: 'count_distinct', @@ -174,12 +172,12 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ { name: 'precision', type: 'number', noNestingFunctions: true, optional: true }, ], returnType: 'number', - examples: [ - `from index | stats result = count_distinct(field)`, - `from index | stats count_distinct(field)`, - ], }, ], + examples: [ + `from index | stats result = count_distinct(field)`, + `from index | stats count_distinct(field)`, + ], }, { name: 'st_centroid_agg', @@ -195,20 +193,18 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ { params: [{ name: 'column', type: 'cartesian_point', noNestingFunctions: true }], returnType: 'cartesian_point', - examples: [ - `from index | stats result = st_centroid_agg(cartesian_field)`, - `from index | stats st_centroid_agg(cartesian_field)`, - ], }, { params: [{ name: 'column', type: 'geo_point', noNestingFunctions: true }], returnType: 'geo_point', - examples: [ - `from index | stats result = st_centroid_agg(geo_field)`, - `from index | stats st_centroid_agg(geo_field)`, - ], }, ], + examples: [ + `from index | stats result = st_centroid_agg(cartesian_field)`, + `from index | stats st_centroid_agg(cartesian_field)`, + `from index | stats result = st_centroid_agg(geo_field)`, + `from index | stats st_centroid_agg(geo_field)`, + ], }, { name: 'values', @@ -221,11 +217,11 @@ export const statsAggregationFunctionDefinitions: FunctionDefinition[] = [ { params: [{ name: 'expression', type: 'any', noNestingFunctions: true }], returnType: 'any', - examples: [ - 'from index | stats all_agents=values(agents.keyword)', - 'from index | stats all_sorted_agents=mv_sort(values(agents.keyword))', - ], }, ], + examples: [ + 'from index | stats all_agents=values(agents.keyword)', + 'from index | stats all_sorted_agents=mv_sort(values(agents.keyword))', + ], }, ]); diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts index 7347f4d18953e..d48baaf903541 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/functions.ts @@ -6,1780 +6,4630 @@ * Side Public License, v 1. */ -import { i18n } from '@kbn/i18n'; +// NOTE: This file is generated by the generate_function_definitions.js script +// Do not edit it manually + import type { ESQLFunction } from '@kbn/esql-ast'; +import { i18n } from '@kbn/i18n'; import { isLiteralItem } from '../shared/helpers'; import type { FunctionDefinition } from './types'; -const validateLogFunctions = (fnDef: ESQLFunction) => { - const messages = []; - // do not really care here about the base and field - // just need to check both values are not negative - for (const arg of fnDef.args) { - if (isLiteralItem(arg) && arg.value < 0) { - messages.push({ - type: 'warning' as const, - code: 'logOfNegativeValue', - text: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.divide.warning.logOfNegativeValue', - { - defaultMessage: 'Log of a negative number results in null: {value}', - values: { - value: arg.value, - }, - } - ), - location: arg.location, - }); - } - } - return messages; -}; - -const dateDiffSuggestions = [ - 'year', - 'quarter', - 'month', - 'dayofyear', - 'day', - 'week', - 'weekday', - 'hour', - 'minute', - 'second', - 'millisecond', - 'microsecond', - 'nanosecond', -]; +const absDefinition: FunctionDefinition = { + type: 'eval', + name: 'abs', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.abs', { + defaultMessage: 'Returns the absolute value.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW number = -1.0 \n| EVAL abs_number = ABS(number)', + 'FROM employees\n| KEEP first_name, last_name, height\n| EVAL abs_height = ABS(0.0 - height)', + ], +}; -const dateDiffOptions = [ - 'year', - 'years', - 'yy', - 'yyyy', - 'quarter', - 'quarters', - 'qq', - 'q', - 'month', - 'months', - 'mm', - 'm', - 'dayofyear', - 'dy', - 'y', - 'day', - 'days', - 'dd', - 'd', - 'week', - 'weeks', - 'wk', - 'ww', - 'weekday', - 'weekdays', - 'dw', - 'hour', - 'hours', - 'hh', - 'minute', - 'minutes', - 'mi', - 'n', - 'second', - 'seconds', - 'ss', - 's', - 'millisecond', - 'milliseconds', - 'ms', - 'microsecond', - 'microseconds', - 'mcs', - 'nanosecond', - 'nanoseconds', - 'ns', -]; +const acosDefinition: FunctionDefinition = { + type: 'eval', + name: 'acos', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.acos', { + defaultMessage: 'Returns the arccosine of `n` as an angle, expressed in radians.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=.9\n| EVAL acos=ACOS(a)'], +}; -export const evalFunctionsDefinitions: FunctionDefinition[] = [ - { - name: 'round', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.roundDoc', { - defaultMessage: - 'Returns a number rounded to the decimal, specified by he closest integer value. The default is to round to an integer.', - }), - signatures: [ - { - params: [ - { name: 'field', type: 'number' as const }, - { name: 'decimals', type: 'number' as const, optional: true }, - ], - returnType: 'number' as const, - examples: [ - `from index | eval round_value = round(field)`, - `from index | eval round_value = round(field, 2)`, - ], - }, - ], - }, - { - name: 'signum', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.signumDoc', { - defaultMessage: - 'Returns the sign of the given number. It returns -1 for negative numbers, 0 for 0 and 1 for positive numbers.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`from index | eval s = signum(field)`], - }, - ], - }, - { - name: 'abs', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.absDoc', { - defaultMessage: 'Returns the absolute value.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`from index | eval abs_value = abs(field)`], - }, - ], - }, - { - name: 'ceil', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ceilDoc', { - defaultMessage: 'Round a number up to the nearest integer.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`from index | eval ceil_value = ceil(field)`], - }, - ], - }, - { - name: 'log10', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.log10Doc', { - defaultMessage: 'Returns the log base 10.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`from index | eval log10_value = log10(field)`], - }, - ], - validate: validateLogFunctions, - }, - { - name: 'log', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.logDoc', { - defaultMessage: - 'A scalar function log(based, value) returns the logarithm of a value for a particular base, as specified in the argument', - }), - signatures: [ - { - params: [ - { name: 'baseOrField', type: 'number' as const }, - { name: 'field', type: 'number' as const, optional: true }, - ], - returnType: 'number' as const, - examples: [ - `from index | eval log2_value = log(2, field)`, - `from index | eval loge_value = log(field)`, - ], - }, - ], - validate: validateLogFunctions, - }, - { - name: 'pow', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.powDoc', { - defaultMessage: - 'Returns the the value of a base (first argument) raised to a power (second argument).', - }), - signatures: [ - { - params: [ - { name: 'field', type: 'number' as const }, - { name: 'exponent', type: 'number' as const }, - ], - returnType: 'number' as const, - examples: ['from index | eval s = POW(field, exponent)'], - }, - ], - }, - { - name: 'concat', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.concatDoc', { - defaultMessage: 'Concatenates two or more strings.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'string' as const }], - minParams: 2, - returnType: 'string' as const, - examples: ['from index | eval concatenated = concat(field1, "-", field2)'], - }, - ], - }, - { - name: 'replace', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.replaceDoc', { - defaultMessage: - 'The function substitutes in the string (1st argument) any match of the regular expression (2nd argument) with the replacement string (3rd argument). If any of the arguments are NULL, the result is NULL.', - }), - signatures: [ - { - params: [ - { name: 'field', type: 'string' as const }, - { name: 'regexp', type: 'string' as const }, - { name: 'replacement', type: 'string' as const }, - ], - returnType: 'string' as const, - examples: ['from index | eval newStr = replace(field, "Hello", "World")'], - }, - ], - }, - { - name: 'substring', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.substringDoc', { - defaultMessage: - 'Returns a substring of a string, specified by a start position and an optional length.', - }), - signatures: [ - { - params: [ - { name: 'field', type: 'string' as const }, - { name: 'startIndex', type: 'number' as const }, - { name: 'endIndex', type: 'number' as const }, - ], - returnType: 'string' as const, - examples: ['from index | eval new_string = substring(field, 1, 3)'], - }, - ], - }, - { - name: 'to_lower', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toLowerDoc', { - defaultMessage: 'Returns a new string representing the input string converted to lower case.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'string' as const }], - returnType: 'string' as const, - examples: ['from index | eval to_lower(field1)'], - }, - ], - }, - { - name: 'to_upper', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toUpperDoc', { - defaultMessage: 'Returns a new string representing the input string converted to upper case.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'string' as const }], - returnType: 'string' as const, - examples: ['from index | eval to_upper(field1)'], - }, - ], - }, - { - name: 'trim', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.trimDoc', { - defaultMessage: 'Removes leading and trailing whitespaces from strings.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'string' as const }], - returnType: 'string' as const, - examples: ['from index | eval new_string = trim(field)'], - }, - ], - }, - { - name: 'starts_with', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.startsWithDoc', { - defaultMessage: - 'Returns a boolean that indicates whether a keyword string starts with another string.', - }), - signatures: [ - { - params: [ - { name: 'field', type: 'string' as const }, - { name: 'prefix', type: 'string' as const }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval starts_with_a = starts_with(field, "a")'], - }, - ], - }, - { - name: 'ends_with', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.endsWithDoc', { - defaultMessage: - 'Returns a boolean that indicates whether a keyword string ends with another string:', - }), - signatures: [ - { - params: [ - { name: 'field', type: 'string' as const }, - { name: 'prefix', type: 'string' as const }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval ends_with_a = ends_with(field, "a")'], - }, - ], - }, - { - name: 'split', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.splitDoc', { - defaultMessage: 'Splits a single valued string into multiple strings.', - }), - signatures: [ - { - params: [ - { name: 'words', type: 'string' as const }, - { name: 'separator', type: 'string' as const }, - ], - returnType: 'string' as const, - examples: [`ROW words="foo;bar;baz;qux;quux;corge" | EVAL word = SPLIT(words, ";")`], - }, - ], - }, - { - name: 'to_string', - alias: ['to_str'], - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toStringDoc', { - defaultMessage: 'Converts to string.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - returnType: 'string' as const, - examples: [`from index" | EVAL string = to_string(field)`], - }, - ], - }, - { - name: 'to_boolean', - alias: ['to_bool'], - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toBooleanDoc', { - defaultMessage: 'Converts to boolean.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - returnType: 'boolean' as const, - examples: [`from index" | EVAL bool = to_boolean(field)`], - }, - ], - }, - { - name: 'to_cartesianpoint', - description: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.definitions.toCartesianPointDoc', - { - defaultMessage: 'Converts an input value to a `point` value.', - } - ), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - returnType: 'cartesian_point' as const, - examples: [`from index | EVAL point = to_cartesianpoint(field)`], - }, - ], - }, - { - name: 'to_cartesianshape', - description: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.definitions.toCartesianshapeDoc', - { - defaultMessage: 'Converts an input value to a cartesian_shape value.', - } - ), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - returnType: 'cartesian_shape' as const, - examples: [`from index | EVAL cartesianshape = to_cartesianshape(field)`], - }, - ], - }, - { - name: 'to_datetime', - alias: ['to_dt'], - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toDateTimeDoc', { - defaultMessage: 'Converts to date.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - returnType: 'date' as const, - examples: [`from index" | EVAL datetime = to_datetime(field)`], - }, - ], - }, - { - name: 'to_degrees', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toDegreesDoc', { - defaultMessage: 'Coverts to degrees', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`from index | eval degrees = to_degrees(field)`], - }, - ], - }, - { - name: 'to_double', - alias: ['to_dbl'], - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toDoubleDoc', { - defaultMessage: 'Converts to double.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - returnType: 'number' as const, - examples: [`from index | EVAL double = to_double(field)`], - }, - ], - }, - { - name: 'to_geopoint', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toGeopointDoc', { - defaultMessage: 'Converts to geo_point.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - returnType: 'geo_point' as const, - examples: [`from index | EVAL geopoint = to_geopoint(field)`], - }, - ], - }, - { - name: 'to_geoshape', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toGeoshapeDoc', { - defaultMessage: 'Converts an input value to a geo_shape value.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - returnType: 'geo_shape' as const, - examples: [`from index | EVAL geoshape = to_geoshape(field)`], - }, - ], - }, - { - name: 'to_integer', - alias: ['to_int'], - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toIntegerDoc', { - defaultMessage: 'Converts to integer.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - returnType: 'number' as const, - examples: [`from index | EVAL integer = to_integer(field)`], - }, - ], - }, - { - name: 'to_long', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toLongDoc', { - defaultMessage: 'Converts to long.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - returnType: 'number' as const, - examples: [`from index | EVAL long = to_long(field)`], - }, - ], - }, - { - name: 'to_radians', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toRadiansDoc', { - defaultMessage: 'Converts to radians', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`from index | eval radians = to_radians(field)`], - }, - ], - }, - { - name: 'to_unsigned_long', - alias: ['to_ul', 'to_ulong'], - description: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.definitions.toUnsignedLongDoc', - { - defaultMessage: 'Converts to unsigned long.', +const asinDefinition: FunctionDefinition = { + type: 'eval', + name: 'asin', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.asin', { + defaultMessage: + 'Returns the arcsine of the input\nnumeric expression as an angle, expressed in radians.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=.9\n| EVAL asin=ASIN(a)'], +}; + +const atanDefinition: FunctionDefinition = { + type: 'eval', + name: 'atan', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.atan', { + defaultMessage: + 'Returns the arctangent of the input\nnumeric expression as an angle, expressed in radians.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=12.9\n| EVAL atan=ATAN(a)'], +}; + +const atan2Definition: FunctionDefinition = { + type: 'eval', + name: 'atan2', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.atan2', { + defaultMessage: + 'The angle between the positive x-axis and the ray from the\norigin to the point (x , y) in the Cartesian plane, expressed in radians.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'y_coordinate', + type: 'number', + optional: false, + }, + { + name: 'x_coordinate', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW y=12.9, x=.6\n| EVAL atan2=ATAN2(y, x)'], +}; + +const cbrtDefinition: FunctionDefinition = { + type: 'eval', + name: 'cbrt', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cbrt', { + defaultMessage: + 'Returns the cube root of a number. The input can be any numeric value, the return value is always a double.\nCube roots of infinities are null.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW d = 1000.0\n| EVAL c = cbrt(d)'], +}; + +const ceilDefinition: FunctionDefinition = { + type: 'eval', + name: 'ceil', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ceil', { + defaultMessage: 'Round a number up to the nearest integer.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8\n| EVAL a=CEIL(a)'], +}; + +const cidrMatchDefinition: FunctionDefinition = { + type: 'eval', + name: 'cidr_match', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cidr_match', { + defaultMessage: + 'Returns true if the provided IP is contained in one of the provided CIDR blocks.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'ip', + type: 'ip', + optional: false, + }, + { + name: 'blockX', + type: 'string', + optional: false, + }, + ], + returnType: 'boolean', + minParams: 2, + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM hosts \n| WHERE CIDR_MATCH(ip1, "127.0.0.2/32", "127.0.0.3/32") \n| KEEP card, host, ip0, ip1', + ], +}; + +const coalesceDefinition: FunctionDefinition = { + type: 'eval', + name: 'coalesce', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.coalesce', { + defaultMessage: + 'Returns the first of its arguments that is not null. If all arguments are null, it returns `null`.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'first', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'number', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'number', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'date', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'date', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'string', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'string', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'ip', + optional: false, + }, + ], + returnType: 'ip', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'ip', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'ip', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'cartesian_point', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'cartesian_point', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'cartesian_point', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'cartesian_shape', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'cartesian_shape', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'geo_point', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'geo_point', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'geo_point', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'geo_shape', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'geo_shape', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'geo_shape', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'version', + optional: false, + }, + ], + returnType: 'version', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'version', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'version', + minParams: 1, + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=null, b="b"\n| EVAL COALESCE(a, b)'], +}; + +const concatDefinition: FunctionDefinition = { + type: 'eval', + name: 'concat', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.concat', { + defaultMessage: 'Concatenates two or more strings.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string1', + type: 'string', + optional: false, + }, + { + name: 'string2', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + minParams: 2, + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP first_name, last_name\n| EVAL fullname = CONCAT(first_name, " ", last_name)', + ], +}; + +const cosDefinition: FunctionDefinition = { + type: 'eval', + name: 'cos', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cos', { + defaultMessage: 'Returns the cosine of an angle.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'angle', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8 \n| EVAL cos=COS(a)'], +}; + +const coshDefinition: FunctionDefinition = { + type: 'eval', + name: 'cosh', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cosh', { + defaultMessage: 'Returns the hyperbolic cosine of an angle.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'angle', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8 \n| EVAL cosh=COSH(a)'], +}; + +const dateDiffDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_diff', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_diff', { + defaultMessage: + 'Subtracts the `startTimestamp` from the `endTimestamp` and returns the difference in multiples of `unit`.\nIf `startTimestamp` is later than the `endTimestamp`, negative values are returned.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'unit', + type: 'string', + optional: false, + literalOptions: [ + 'year', + 'years', + 'yy', + 'yyyy', + 'quarter', + 'quarters', + 'qq', + 'q', + 'month', + 'months', + 'mm', + 'm', + 'dayofyear', + 'dy', + 'y', + 'day', + 'days', + 'dd', + 'd', + 'week', + 'weeks', + 'wk', + 'ww', + 'weekday', + 'weekdays', + 'dw', + 'hour', + 'hours', + 'hh', + 'minute', + 'minutes', + 'mi', + 'n', + 'second', + 'seconds', + 'ss', + 's', + 'millisecond', + 'milliseconds', + 'ms', + 'microsecond', + 'microseconds', + 'mcs', + 'nanosecond', + 'nanoseconds', + 'ns', + ], + literalSuggestions: [ + 'year', + 'quarter', + 'month', + 'week', + 'day', + 'hour', + 'minute', + 'second', + 'millisecond', + 'microsecond', + 'nanosecond', + ], + }, + { + name: 'startTimestamp', + type: 'date', + optional: false, + }, + { + name: 'endTimestamp', + type: 'date', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW date1 = TO_DATETIME("2023-12-02T11:00:00.000Z"), date2 = TO_DATETIME("2023-12-02T11:00:00.001Z")\n| EVAL dd_ms = DATE_DIFF("microseconds", date1, date2)', + ], +}; + +const dateExtractDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_extract', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_extract', { + defaultMessage: 'Extracts parts of a date, like year, month, day, hour.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'datePart', + type: 'chrono_literal', + optional: false, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW date = DATE_PARSE("yyyy-MM-dd", "2022-05-06")\n| EVAL year = DATE_EXTRACT("year", date)', + 'FROM sample_data\n| WHERE DATE_EXTRACT("hour_of_day", @timestamp) < 9 AND DATE_EXTRACT("hour_of_day", @timestamp) >= 17', + ], +}; + +const dateFormatDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_format', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_format', { + defaultMessage: 'Returns a string representation of a date, in the provided format.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'dateFormat', + type: 'string', + optional: true, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP first_name, last_name, hire_date\n| EVAL hired = DATE_FORMAT("YYYY-MM-dd", hire_date)', + ], +}; + +const dateParseDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_parse', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_parse', { + defaultMessage: + 'Returns a date by parsing the second argument using the format specified in the first argument.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'datePattern', + type: 'string', + optional: true, + }, + { + name: 'dateString', + type: 'string', + optional: false, + }, + ], + returnType: 'date', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW date_string = "2022-05-06"\n| EVAL date = DATE_PARSE("yyyy-MM-dd", date_string)'], +}; + +const dateTruncDefinition: FunctionDefinition = { + type: 'eval', + name: 'date_trunc', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.date_trunc', { + defaultMessage: 'Rounds down a date to the closest interval.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'interval', + type: 'time_literal', + optional: false, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'interval', + type: 'date', + optional: false, + }, + { + name: 'date', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP first_name, last_name, hire_date\n| EVAL year_hired = DATE_TRUNC(1 year, hire_date)', + 'FROM employees\n| EVAL year = DATE_TRUNC(1 year, hire_date)\n| STATS hires = COUNT(emp_no) BY year\n| SORT year', + 'FROM sample_data\n| EVAL error = CASE(message LIKE "*error*", 1, 0)\n| EVAL hour = DATE_TRUNC(1 hour, @timestamp)\n| STATS error_rate = AVG(error) by hour\n| SORT hour', + ], +}; + +const eDefinition: FunctionDefinition = { + type: 'eval', + name: 'e', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.e', { + defaultMessage: "Returns Euler's number.", + }), + alias: undefined, + signatures: [ + { + params: [], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW E()'], +}; + +const endsWithDefinition: FunctionDefinition = { + type: 'eval', + name: 'ends_with', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ends_with', { + defaultMessage: + 'Returns a boolean that indicates whether a keyword string ends with another string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'str', + type: 'string', + optional: false, + }, + { + name: 'suffix', + type: 'string', + optional: false, + }, + ], + returnType: 'boolean', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['FROM employees\n| KEEP last_name\n| EVAL ln_E = ENDS_WITH(last_name, "d")'], +}; + +const floorDefinition: FunctionDefinition = { + type: 'eval', + name: 'floor', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.floor', { + defaultMessage: 'Round a number down to the nearest integer.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8\n| EVAL a=FLOOR(a)'], +}; + +const fromBase64Definition: FunctionDefinition = { + type: 'eval', + name: 'from_base64', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.from_base64', { + defaultMessage: 'Decode a base64 string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['row a = "ZWxhc3RpYw==" \n| eval d = from_base64(a)'], +}; + +const greatestDefinition: FunctionDefinition = { + type: 'eval', + name: 'greatest', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.greatest', { + defaultMessage: + 'Returns the maximum value from multiple columns. This is similar to <>\nexcept it is intended to run on multiple columns at once.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'number', + optional: false, + }, + { + name: 'rest', + type: 'number', + optional: true, + }, + ], + returnType: 'number', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'ip', + optional: false, + }, + { + name: 'rest', + type: 'ip', + optional: true, + }, + ], + returnType: 'ip', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'string', + optional: false, + }, + { + name: 'rest', + type: 'string', + optional: true, + }, + ], + returnType: 'string', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'version', + optional: false, + }, + { + name: 'rest', + type: 'version', + optional: true, + }, + ], + returnType: 'version', + minParams: 1, + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a = 10, b = 20\n| EVAL g = GREATEST(a, b)'], +}; + +const leastDefinition: FunctionDefinition = { + type: 'eval', + name: 'least', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.least', { + defaultMessage: + 'Returns the minimum value from multiple columns. This is similar to <> except it is intended to run on multiple columns at once.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'boolean', + optional: false, + }, + { + name: 'rest', + type: 'boolean', + optional: true, + }, + ], + returnType: 'boolean', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'number', + optional: false, + }, + { + name: 'rest', + type: 'number', + optional: true, + }, + ], + returnType: 'number', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'ip', + optional: false, + }, + { + name: 'rest', + type: 'ip', + optional: true, + }, + ], + returnType: 'ip', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'string', + optional: false, + }, + { + name: 'rest', + type: 'string', + optional: true, + }, + ], + returnType: 'string', + minParams: 1, + }, + { + params: [ + { + name: 'first', + type: 'version', + optional: false, + }, + { + name: 'rest', + type: 'version', + optional: true, + }, + ], + returnType: 'version', + minParams: 1, + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a = 10, b = 20\n| EVAL l = LEAST(a, b)'], +}; + +const leftDefinition: FunctionDefinition = { + type: 'eval', + name: 'left', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.left', { + defaultMessage: + "Returns the substring that extracts 'length' chars from 'string' starting from the left.", + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + { + name: 'length', + type: 'number', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP last_name\n| EVAL left = LEFT(last_name, 3)\n| SORT last_name ASC\n| LIMIT 5', + ], +}; + +const lengthDefinition: FunctionDefinition = { + type: 'eval', + name: 'length', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.length', { + defaultMessage: 'Returns the character length of a string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['FROM employees\n| KEEP first_name, last_name\n| EVAL fn_length = LENGTH(first_name)'], +}; + +const locateDefinition: FunctionDefinition = { + type: 'eval', + name: 'locate', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.locate', { + defaultMessage: + 'Returns an integer that indicates the position of a keyword substring within another string', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + { + name: 'substring', + type: 'string', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + { + name: 'substring', + type: 'string', + optional: false, + }, + { + name: 'start', + type: 'number', + optional: true, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['row a = "hello"\n| eval a_ll = locate(a, "ll")'], +}; + +const logDefinition: FunctionDefinition = { + type: 'eval', + name: 'log', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.log', { + defaultMessage: + 'Returns the logarithm of a value to a base. The input can be any numeric value, the return value is always a double.\n\nLogs of zero, negative numbers, and base of one return `null` as well as a warning.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'base', + type: 'number', + optional: true, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'base', + type: 'number', + optional: true, + }, + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: (fnDef: ESQLFunction) => { + const messages = []; + // do not really care here about the base and field + // just need to check both values are not negative + for (const arg of fnDef.args) { + if (isLiteralItem(arg) && arg.value < 0) { + messages.push({ + type: 'warning' as const, + code: 'logOfNegativeValue', + text: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.divide.warning.logOfNegativeValue', + { + defaultMessage: 'Log of a negative number results in null: {value}', + values: { + value: arg.value, + }, + } + ), + location: arg.location, + }); } - ), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - returnType: 'number' as const, - examples: [`from index | EVAL unsigned_long = to_unsigned_long(field)`], - }, - ], - }, - { - name: 'to_ip', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toIpDoc', { - defaultMessage: 'Converts to ip.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - returnType: 'ip' as const, - examples: [`from index | EVAL ip = to_ip(field)`], - }, - ], - }, - { - name: 'to_version', - alias: ['to_ver'], - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.toVersionDoc', { - defaultMessage: 'Converts to version.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'string' as const }], - returnType: 'version' as const, - examples: [`from index | EVAL version = to_version(stringField)`], - }, - ], + } + return messages; }, - { - name: 'date_extract', - description: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.definitions.dateExtractDoc', - { - defaultMessage: `Extracts parts of a date, like year, month, day, hour. The supported field types are those provided by java.time.temporal.ChronoField`, + examples: [ + 'ROW base = 2.0, value = 8.0\n| EVAL s = LOG(base, value)', + 'row value = 100\n| EVAL s = LOG(value);', + ], +}; + +const log10Definition: FunctionDefinition = { + type: 'eval', + name: 'log10', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.log10', { + defaultMessage: + 'Returns the logarithm of a value to base 10. The input can be any numeric value, the return value is always a double.\n\nLogs of 0 and negative numbers return `null` as well as a warning.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: (fnDef: ESQLFunction) => { + const messages = []; + // do not really care here about the base and field + // just need to check both values are not negative + for (const arg of fnDef.args) { + if (isLiteralItem(arg) && arg.value < 0) { + messages.push({ + type: 'warning' as const, + code: 'logOfNegativeValue', + text: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.divide.warning.logOfNegativeValue', + { + defaultMessage: 'Log of a negative number results in null: {value}', + values: { + value: arg.value, + }, + } + ), + location: arg.location, + }); } - ), - signatures: [ - { - params: [ - { - name: 'date_part', - type: 'chrono_literal' as const, - }, - { name: 'field', type: 'date' as const }, - ], - returnType: 'number' as const, - examples: [ - `ROW date = DATE_PARSE("yyyy-MM-dd", "2022-05-06") | EVAL year = DATE_EXTRACT("year", date)`, - ], - }, - ], - }, - { - name: 'date_diff', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.dateDiffDoc', { - defaultMessage: `Subtracts the startTimestamp from the endTimestamp and returns the difference in multiples of unit. If startTimestamp is later than the endTimestamp, negative values are returned.`, - }), - signatures: [ - { - params: [ - { - name: 'unit', - type: 'string' as const, - literalOptions: dateDiffOptions, - literalSuggestions: dateDiffSuggestions, - }, - { name: 'startTimestamp', type: 'date' as const }, - { name: 'endTimestamp', type: 'date' as const }, - ], - returnType: 'number' as const, - examples: [], - }, - ], - }, - { - name: 'date_format', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.dateFormatDoc', { - defaultMessage: `Returns a string representation of a date in the provided format. If no format is specified, the "yyyy-MM-dd'T'HH:mm:ss.SSSZ" format is used.`, - }), - signatures: [ - { - params: [ - { name: 'field', type: 'date' as const }, - { name: 'format_string', type: 'string' as const, optional: true }, - ], - returnType: 'string' as const, - examples: ['from index | eval hired = date_format("YYYY-MM-dd", hire_date)'], - }, - ], - }, - { - name: 'date_trunc', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.dateTruncDoc', { - defaultMessage: `Rounds down a date to the closest interval. Intervals can be expressed using the timespan literal syntax.`, - }), - signatures: [ - { - params: [ - { name: 'time', type: 'time_literal' as const }, - { name: 'field', type: 'date' as const }, - ], - returnType: 'date' as const, - examples: [`from index | eval year_hired = DATE_TRUNC(1 year, hire_date)`], - }, - ], - }, - { - name: 'date_parse', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.dateParseDoc', { - defaultMessage: `Parse dates from strings.`, - }), - signatures: [ - { - params: [ - { name: 'field', type: 'string' as const }, - { name: 'format_string', type: 'string' as const }, - ], - returnType: 'date' as const, - examples: [ - `from index | eval year_hired = date_parse("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", hire_date)`, - ], - }, - ], - }, - { - name: 'case', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.caseDoc', { - defaultMessage: - 'Accepts pairs of conditions and values. The function returns the value that belongs to the first condition that evaluates to `true`. If the number of arguments is odd, the last argument is the default value which is returned when no condition matches.', - }), - signatures: [ - { - params: [ - { name: 'condition', type: 'boolean' as const }, - { name: 'value', type: 'any' as const }, - ], - minParams: 2, - returnType: 'any' as const, - examples: [ - `from index | eval type = case(languages <= 1, "monolingual", languages <= 2, "bilingual", "polyglot")`, - ], - }, - ], - }, - { - name: 'length', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.lengthDoc', { - defaultMessage: 'Returns the character length of a string.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'string' as const }], - returnType: 'number' as const, - examples: [`from index | eval fn_length = length(field)`], - }, - ], - }, - { - name: 'acos', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.acosDoc', { - defaultMessage: 'Inverse cosine trigonometric function', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`from index | eval acos = acos(field)`], - }, - ], - }, - { - name: 'asin', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.asinDoc', { - defaultMessage: 'Inverse sine trigonometric function', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`from index | eval asin = asin(field)`], - }, - ], - }, - { - name: 'atan', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.atanDoc', { - defaultMessage: 'Inverse tangent trigonometric function', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`from index | eval atan = atan(field)`], - }, - ], - }, - { - name: 'atan2', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.atan2Doc', { - defaultMessage: - 'The angle between the positive x-axis and the ray from the origin to the point (x , y) in the Cartesian plane', - }), - signatures: [ - { - params: [ - { name: 'x', type: 'number' as const }, - { name: 'y', type: 'number' as const }, - ], - returnType: 'number' as const, - examples: [`from index | eval atan2 = atan2(x, y)`], - }, - ], - }, - { - name: 'coalesce', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.coalesceDoc', { - defaultMessage: 'Returns the first non-null value.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - minParams: 1, - returnType: 'any' as const, - examples: [`ROW a=null, b="b" | EVAL COALESCE(a, b)`], - }, - ], - }, - { - name: 'cos', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cosDoc', { - defaultMessage: 'Cosine trigonometric function', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`from index | eval cos = cos(field)`], - }, - ], - }, - { - name: 'cosh', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.coshDoc', { - defaultMessage: 'Cosine hyperbolic function', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`from index | eval cosh = cosh(field)`], - }, - ], - }, - { - name: 'floor', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.floorDoc', { - defaultMessage: 'Round a number down to the nearest integer.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`from index | eval a = floor(field)`], - }, - ], - }, - { - name: 'greatest', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.greatestDoc', { - defaultMessage: 'Returns the maximum value from many columns.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'any' as const }], - minParams: 1, - returnType: 'any' as const, - examples: [`ROW a = 10, b = 20 | EVAL g = GREATEST(a, b)`], - }, - ], - }, - { - name: 'least', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.leastDoc', { - defaultMessage: 'Returns the minimum value from many columns.', - }), - signatures: [ - { - params: [{ name: 'first', type: 'any' as const }], - minParams: 1, - returnType: 'any' as const, - examples: ['from index | eval l = least(a, b)'], - }, - ], - }, - { - name: 'left', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.leftDoc', { - defaultMessage: - 'Return the substring that extracts length chars from the string starting from the left.', - }), - signatures: [ - { - params: [ - { name: 'field', type: 'string' as const }, - { name: 'length', type: 'number' as const }, - ], - returnType: 'string' as const, - examples: [`from index | eval substr = left(field, 3)`], - }, - ], - }, - { - name: 'ltrim', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ltrimDoc', { - defaultMessage: 'Removes leading whitespaces from strings.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'string' as const }], - returnType: 'string' as const, - examples: [`ROW message = " some text "| EVAL message = LTRIM(message)`], - }, - ], - }, - { - name: 'now', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.nowDoc', { - defaultMessage: 'Returns current date and time.', - }), - signatures: [ - { - params: [], - returnType: 'date' as const, - examples: [`ROW current_date = NOW()`], - }, - ], - }, - { - name: 'right', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.rightDoc', { - defaultMessage: - 'Return the substring that extracts length chars from the string starting from the right.', - }), - signatures: [ - { - params: [ - { name: 'field', type: 'string' as const }, - { name: 'length', type: 'number' as const }, - ], - returnType: 'string' as const, - examples: [`from index | eval string = right(field, 3)`], - }, - ], - }, - { - name: 'rtrim', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.rtrimDoc', { - defaultMessage: 'Removes trailing whitespaces from strings.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'string' as const }], - returnType: 'string' as const, - examples: [`ROW message = " some text " | EVAL message = RTRIM(message)`], - }, - ], - }, - { - name: 'sin', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sinDoc', { - defaultMessage: 'Sine trigonometric function.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`ROW a=1.8 | EVAL sin=SIN(a)`], - }, - ], - }, - { - name: 'sinh', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sinhDoc', { - defaultMessage: 'Sine hyperbolic function.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`ROW a=1.8 | EVAL sinh=SINH(a)`], - }, - ], - }, - { - name: 'sqrt', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sqrtDoc', { - defaultMessage: 'Returns the square root of a number. ', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`ROW d = 100.0 | EVAL s = SQRT(d)`], - }, - ], - }, - { - name: 'tan', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.tanDoc', { - defaultMessage: 'Tangent trigonometric function.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`ROW a=1.8 | EVAL tan=TAN(a)`], - }, - ], - }, - { - name: 'tanh', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.tanhDoc', { - defaultMessage: 'Tangent hyperbolic function.', - }), - signatures: [ - { - params: [{ name: 'field', type: 'number' as const }], - returnType: 'number' as const, - examples: [`ROW a=1.8 | EVAL tanh=TANH(a)`], - }, - ], - }, - { - name: 'cidr_match', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.cidrMatchDoc', { - defaultMessage: - 'The function takes a first parameter of type IP, followed by one or more parameters evaluated to a CIDR specificatione.', - }), - signatures: [ - { - minParams: 2, - params: [ - { name: 'ip', type: 'ip' as const }, - { name: 'cidr_block', type: 'string' as const }, - ], - returnType: 'boolean' as const, - examples: [ - 'from index | where cidr_match(ip_field, "127.0.0.1/30")', - 'from index | eval cidr="10.0.0.0/8" | where cidr_match(ip_field, "127.0.0.1/30", cidr)', - ], - }, - ], - }, - { - name: 'mv_sort', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvSortDoc', { - defaultMessage: 'Sorts a multivalue expression in lexicographical order.', - }), - signatures: [ - { - params: [ - { name: 'field', type: 'any' as const }, - { - name: 'order', - type: 'string' as const, - optional: true, - literalOptions: ['asc', 'desc'], - }, - ], - returnType: 'any' as const, - examples: [ - 'row a = [4, 2, -3, 2] | eval sorted = mv_sort(a)', - 'row a = ["b", "c", "a"] | sorted = mv_sort(a, "DESC")', - ], - }, - ], - }, - { - name: 'mv_avg', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvAvgDoc', { - defaultMessage: - 'Converts a multivalued field into a single valued field containing the average of all of the values.', - }), - signatures: [ - { - params: [{ name: 'multivalue', type: 'number' as const }], - returnType: 'number' as const, - examples: ['row a = [1, 2, 3] | eval mv_avg(a)'], - }, - ], - }, - { - name: 'mv_concat', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvConcatDoc', { - defaultMessage: - 'Converts a multivalued string field into a single valued field containing the concatenation of all values separated by a delimiter', - }), - signatures: [ - { - params: [ - { name: 'multivalue', type: 'string' as const }, - { name: 'delimeter', type: 'string' as const }, - ], - returnType: 'string' as const, - examples: ['row a = ["1", "2", "3"] | eval mv_concat(a, ", ")'], - }, - ], - }, - { - name: 'mv_count', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvCountDoc', { - defaultMessage: - 'Converts a multivalued field into a single valued field containing a count of the number of values', - }), - signatures: [ - { - params: [{ name: 'multivalue', type: 'any' as const }], - returnType: 'number' as const, - examples: ['row a = [1, 2, 3] | eval mv_count(a)'], - }, - ], - }, - { - name: 'mv_dedupe', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvDedupeDoc', { - defaultMessage: 'Removes duplicates from a multivalued field', - }), - signatures: [ - { - params: [{ name: 'multivalue', type: 'any' as const }], - returnType: 'any' as const, - examples: ['row a = [2, 2, 3] | eval mv_dedupe(a)'], - }, - ], - }, - { - name: 'mv_first', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvFirstDoc', { - defaultMessage: - 'Reduce a multivalued field to a single valued field containing the first value.', - }), - signatures: [ - { - params: [{ name: 'multivalue', type: 'any' as const }], - returnType: 'any' as const, - examples: ['row a = [1, 2, 3] | eval one = mv_first(a)'], - }, - ], - }, - { - name: 'mv_last', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvLastDoc', { - defaultMessage: - 'Reduce a multivalued field to a single valued field containing the last value.', - }), - signatures: [ - { - params: [{ name: 'multivalue', type: 'any' as const }], - returnType: 'any' as const, - examples: ['row a = [1, 2, 3] | eval three = mv_last(a)'], - }, - ], - }, - { - name: 'mv_max', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvMaxDoc', { - defaultMessage: - 'Converts a multivalued field into a single valued field containing the maximum value.', - }), - signatures: [ - { - params: [{ name: 'multivalue', type: 'any' as const }], - returnType: 'any' as const, - examples: ['row a = [1, 2, 3] | eval mv_max(a)'], - }, - ], - }, - { - name: 'mv_min', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvMinDoc', { - defaultMessage: - 'Converts a multivalued field into a single valued field containing the minimum value.', - }), - signatures: [ - { - params: [{ name: 'multivalue', type: 'any' as const }], - returnType: 'any' as const, - examples: ['row a = [1, 2, 3] | eval mv_min(a)'], - }, - ], - }, - { - name: 'mv_median', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvMedianDoc', { - defaultMessage: - 'Converts a multivalued field into a single valued field containing the median value.', - }), - signatures: [ - { - params: [{ name: 'multivalue', type: 'number' as const }], - returnType: 'number' as const, - examples: ['row a = [1, 2, 3] | eval mv_median(a)'], - }, - ], - }, - { - name: 'mv_sum', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvSumDoc', { - defaultMessage: - 'Converts a multivalued field into a single valued field containing the sum of all of the values.', - }), - signatures: [ - { - params: [{ name: 'multivalue', type: 'number' as const }], - returnType: 'number' as const, - examples: ['row a = [1, 2, 3] | eval mv_sum(a)'], - }, - ], - }, - { - name: 'mv_slice', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvSliceDoc', { - defaultMessage: - 'Returns a subset of the multivalued field using the start and end index values.', - }), - signatures: [ - { - params: [ - { name: 'multivalue', type: 'any' as const }, - { name: 'start', type: 'number' as const }, - { name: 'end', type: 'number' as const }, - ], - returnType: 'number' as const, - examples: ['row a = [1, 2, 2, 3] | eval a1 = mv_slice(a, 1), a2 = mv_slice(a, 2, 3)'], - }, - ], + } + return messages; }, - { - name: 'mv_zip', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mvZipDoc', { + examples: ['ROW d = 1000.0 \n| EVAL s = LOG10(d)'], +}; + +const ltrimDefinition: FunctionDefinition = { + type: 'eval', + name: 'ltrim', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.ltrim', { + defaultMessage: 'Removes leading whitespaces from a string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW message = " some text ", color = " red "\n| EVAL message = LTRIM(message)\n| EVAL color = LTRIM(color)\n| EVAL message = CONCAT("\'", message, "\'")\n| EVAL color = CONCAT("\'", color, "\'")', + ], +}; + +const mvAvgDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_avg', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_avg', { + defaultMessage: + 'Converts a multivalued field into a single valued field containing the average of all of the values.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=[3, 5, 1, 6]\n| EVAL avg_a = MV_AVG(a)'], +}; + +const mvConcatDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_concat', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_concat', { + defaultMessage: + 'Converts a multivalued string expression into a single valued column containing the concatenation of all values separated by a delimiter.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + { + name: 'delim', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW a=["foo", "zoo", "bar"]\n| EVAL j = MV_CONCAT(a, ", ")', + 'ROW a=[10, 9, 8]\n| EVAL j = MV_CONCAT(TO_STRING(a), ", ")', + ], +}; + +const mvCountDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_count', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_count', { + defaultMessage: + 'Converts a multivalued expression into a single valued column containing a count of the number of values.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=["foo", "zoo", "bar"]\n| EVAL count_a = MV_COUNT(a)'], +}; + +const mvDedupeDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_dedupe', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_dedupe', { + defaultMessage: 'Remove duplicate values from a multivalued field.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'geo_point', + }, + { + params: [ + { + name: 'field', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'geo_shape', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + ], + returnType: 'version', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=["foo", "foo", "bar", "foo"]\n| EVAL dedupe_a = MV_DEDUPE(a)'], +}; + +const mvFirstDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_first', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_first', { + defaultMessage: + "Converts a multivalued expression into a single valued column containing the\nfirst value. This is most useful when reading from a function that emits\nmultivalued columns in a known order like <>.\n\nThe order that <> are read from\nunderlying storage is not guaranteed. It is *frequently* ascending, but don't\nrely on that. If you need the minimum value use <> instead of\n`MV_FIRST`. `MV_MIN` has optimizations for sorted values so there isn't a\nperformance benefit to `MV_FIRST`.", + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'geo_point', + }, + { + params: [ + { + name: 'field', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'geo_shape', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + ], + returnType: 'version', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a="foo;bar;baz"\n| EVAL first_a = MV_FIRST(SPLIT(a, ";"))'], +}; + +const mvLastDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_last', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_last', { + defaultMessage: + "Converts a multivalue expression into a single valued column containing the last\nvalue. This is most useful when reading from a function that emits multivalued\ncolumns in a known order like <>.\n\nThe order that <> are read from\nunderlying storage is not guaranteed. It is *frequently* ascending, but don't\nrely on that. If you need the maximum value use <> instead of\n`MV_LAST`. `MV_MAX` has optimizations for sorted values so there isn't a\nperformance benefit to `MV_LAST`.", + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'geo_point', + }, + { + params: [ + { + name: 'field', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'geo_shape', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + ], + returnType: 'version', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a="foo;bar;baz"\n| EVAL last_a = MV_LAST(SPLIT(a, ";"))'], +}; + +const mvMaxDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_max', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_max', { + defaultMessage: + 'Converts a multivalued expression into a single valued column containing the maximum value.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + ], + returnType: 'version', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW a=[3, 5, 1]\n| EVAL max_a = MV_MAX(a)', + 'ROW a=["foo", "zoo", "bar"]\n| EVAL max_a = MV_MAX(a)', + ], +}; + +const mvMedianDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_median', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_median', { + defaultMessage: + 'Converts a multivalued field into a single valued field containing the median value.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW a=[3, 5, 1]\n| EVAL median_a = MV_MEDIAN(a)', + 'ROW a=[3, 7, 1, 6]\n| EVAL median_a = MV_MEDIAN(a)', + ], +}; + +const mvMinDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_min', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_min', { + defaultMessage: + 'Converts a multivalued expression into a single valued column containing the minimum value.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + ], + returnType: 'version', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW a=[2, 1]\n| EVAL min_a = MV_MIN(a)', + 'ROW a=["foo", "bar"]\n| EVAL min_a = MV_MIN(a)', + ], +}; + +const mvSliceDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_slice', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_slice', { + defaultMessage: + 'Returns a subset of the multivalued field using the start and end index values.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + { + name: 'start', + type: 'number', + optional: false, + }, + { + name: 'end', + type: 'number', + optional: true, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: false, + }, + { + name: 'start', + type: 'number', + optional: false, + }, + { + name: 'end', + type: 'number', + optional: true, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'start', + type: 'number', + optional: false, + }, + { + name: 'end', + type: 'number', + optional: true, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + { + name: 'start', + type: 'number', + optional: false, + }, + { + name: 'end', + type: 'number', + optional: true, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + { + name: 'start', + type: 'number', + optional: false, + }, + { + name: 'end', + type: 'number', + optional: true, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + { + name: 'start', + type: 'number', + optional: false, + }, + { + name: 'end', + type: 'number', + optional: true, + }, + ], + returnType: 'geo_point', + }, + { + params: [ + { + name: 'field', + type: 'geo_shape', + optional: false, + }, + { + name: 'start', + type: 'number', + optional: false, + }, + { + name: 'end', + type: 'number', + optional: true, + }, + ], + returnType: 'geo_shape', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + { + name: 'start', + type: 'number', + optional: false, + }, + { + name: 'end', + type: 'number', + optional: true, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + { + name: 'start', + type: 'number', + optional: false, + }, + { + name: 'end', + type: 'number', + optional: true, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + { + name: 'start', + type: 'number', + optional: false, + }, + { + name: 'end', + type: 'number', + optional: true, + }, + ], + returnType: 'version', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'row a = [1, 2, 2, 3]\n| eval a1 = mv_slice(a, 1), a2 = mv_slice(a, 2, 3)', + 'row a = [1, 2, 2, 3]\n| eval a1 = mv_slice(a, -2), a2 = mv_slice(a, -3, -1)', + ], +}; + +const mvSortDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_sort', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_sort', { + defaultMessage: 'Sorts a multivalued field in lexicographical order.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + { + name: 'order', + type: 'string', + optional: true, + literalOptions: ['asc', 'desc'], + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + { + name: 'order', + type: 'string', + optional: true, + literalOptions: ['asc', 'desc'], + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + { + name: 'order', + type: 'string', + optional: true, + literalOptions: ['asc', 'desc'], + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + { + name: 'order', + type: 'string', + optional: true, + literalOptions: ['asc', 'desc'], + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + { + name: 'order', + type: 'string', + optional: true, + literalOptions: ['asc', 'desc'], + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + { + name: 'order', + type: 'string', + optional: true, + literalOptions: ['asc', 'desc'], + }, + ], + returnType: 'version', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a = [4, 2, -3, 2]\n| EVAL sa = mv_sort(a), sd = mv_sort(a, "DESC")'], +}; + +const mvSumDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_sum', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_sum', { + defaultMessage: + 'Converts a multivalued field into a single valued field containing the sum of all of the values.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=[3, 5, 6]\n| EVAL sum_a = MV_SUM(a)'], +}; + +const mvZipDefinition: FunctionDefinition = { + type: 'eval', + name: 'mv_zip', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.mv_zip', { + defaultMessage: + 'Combines the values from two multivalued fields with a delimiter that joins them together.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string1', + type: 'string', + optional: false, + }, + { + name: 'string2', + type: 'string', + optional: false, + }, + { + name: 'delim', + type: 'string', + optional: true, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW a = ["x", "y", "z"], b = ["1", "2"]\n| EVAL c = mv_zip(a, b, "-")\n| KEEP a, b, c', + ], +}; + +const nowDefinition: FunctionDefinition = { + type: 'eval', + name: 'now', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.now', { + defaultMessage: 'Returns current date and time.', + }), + alias: undefined, + signatures: [ + { + params: [], + returnType: 'date', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW current_date = NOW()', 'FROM sample_data\n| WHERE @timestamp > NOW() - 1 hour'], +}; + +const piDefinition: FunctionDefinition = { + type: 'eval', + name: 'pi', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.pi', { + defaultMessage: "Returns Pi, the ratio of a circle's circumference to its diameter.", + }), + alias: undefined, + signatures: [ + { + params: [], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW PI()'], +}; + +const powDefinition: FunctionDefinition = { + type: 'eval', + name: 'pow', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.pow', { + defaultMessage: 'Returns the value of `base` raised to the power of `exponent`.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'base', + type: 'number', + optional: false, + }, + { + name: 'exponent', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW base = 2.0, exponent = 2\n| EVAL result = POW(base, exponent)', + 'ROW base = 4, exponent = 0.5\n| EVAL s = POW(base, exponent)', + ], +}; + +const replaceDefinition: FunctionDefinition = { + type: 'eval', + name: 'replace', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.replace', { + defaultMessage: + 'The function substitutes in the string `str` any match of the regular expression `regex`\nwith the replacement string `newStr`.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + { + name: 'regex', + type: 'string', + optional: false, + }, + { + name: 'newString', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW str = "Hello World"\n| EVAL str = REPLACE(str, "World", "Universe")\n| KEEP str'], +}; + +const rightDefinition: FunctionDefinition = { + type: 'eval', + name: 'right', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.right', { + defaultMessage: + "Return the substring that extracts 'length' chars from 'str' starting from the right.", + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + { + name: 'length', + type: 'number', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP last_name\n| EVAL right = RIGHT(last_name, 3)\n| SORT last_name ASC\n| LIMIT 5', + ], +}; + +const roundDefinition: FunctionDefinition = { + type: 'eval', + name: 'round', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.round', { + defaultMessage: + 'Rounds a number to the specified number of decimal places.\nDefaults to 0, which returns the nearest integer. If the\nprecision is a negative number, rounds to the number of digits left\nof the decimal point.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + { + name: 'decimals', + type: 'number', + optional: true, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP first_name, last_name, height\n| EVAL height_ft = ROUND(height * 3.281, 1)', + ], +}; + +const rtrimDefinition: FunctionDefinition = { + type: 'eval', + name: 'rtrim', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.rtrim', { + defaultMessage: 'Removes trailing whitespaces from a string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW message = " some text ", color = " red "\n| EVAL message = RTRIM(message)\n| EVAL color = RTRIM(color)\n| EVAL message = CONCAT("\'", message, "\'")\n| EVAL color = CONCAT("\'", color, "\'")', + ], +}; + +const signumDefinition: FunctionDefinition = { + type: 'eval', + name: 'signum', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.signum', { + defaultMessage: + 'Returns the sign of the given number.\nIt returns `-1` for negative numbers, `0` for `0` and `1` for positive numbers.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW d = 100.0\n| EVAL s = SIGNUM(d)'], +}; + +const sinDefinition: FunctionDefinition = { + type: 'eval', + name: 'sin', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sin', { + defaultMessage: 'Returns ths Sine trigonometric function of an angle.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'angle', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8 \n| EVAL sin=SIN(a)'], +}; + +const sinhDefinition: FunctionDefinition = { + type: 'eval', + name: 'sinh', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sinh', { + defaultMessage: 'Returns the hyperbolic sine of an angle.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'angle', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8 \n| EVAL sinh=SINH(a)'], +}; + +const splitDefinition: FunctionDefinition = { + type: 'eval', + name: 'split', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.split', { + defaultMessage: 'Split a single valued string into multiple strings.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + { + name: 'delim', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW words="foo;bar;baz;qux;quux;corge"\n| EVAL word = SPLIT(words, ";")'], +}; + +const sqrtDefinition: FunctionDefinition = { + type: 'eval', + name: 'sqrt', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.sqrt', { + defaultMessage: + 'Returns the square root of a number. The input can be any numeric value, the return value is always a double.\nSquare roots of negative numbers and infinities are null.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW d = 100.0\n| EVAL s = SQRT(d)'], +}; + +const stContainsDefinition: FunctionDefinition = { + type: 'eval', + name: 'st_contains', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.st_contains', { + defaultMessage: + 'Returns whether the first geometry contains the second geometry.\nThis is the inverse of the <> function.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'geomA', + type: 'cartesian_point', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'cartesian_point', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_point', + optional: false, + }, + { + name: 'geomB', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_point', + optional: false, + }, + { + name: 'geomB', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_shape', + optional: false, + }, + { + name: 'geomB', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_shape', + optional: false, + }, + { + name: 'geomB', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM airport_city_boundaries\n| WHERE ST_CONTAINS(city_boundary, TO_GEOSHAPE("POLYGON((109.35 18.3, 109.45 18.3, 109.45 18.4, 109.35 18.4, 109.35 18.3))"))\n| KEEP abbrev, airport, region, city, city_location', + ], +}; + +const stDisjointDefinition: FunctionDefinition = { + type: 'eval', + name: 'st_disjoint', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.st_disjoint', { + defaultMessage: + 'Returns whether the two geometries or geometry columns are disjoint.\nThis is the inverse of the <> function.\nIn mathematical terms: ST_Disjoint(A, B) ⇔ A ⋂ B = ∅', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'geomA', + type: 'cartesian_point', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'cartesian_point', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_point', + optional: false, + }, + { + name: 'geomB', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_point', + optional: false, + }, + { + name: 'geomB', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_shape', + optional: false, + }, + { + name: 'geomB', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_shape', + optional: false, + }, + { + name: 'geomB', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM airport_city_boundaries\n| WHERE ST_DISJOINT(city_boundary, TO_GEOSHAPE("POLYGON((-10 -60, 120 -60, 120 60, -10 60, -10 -60))"))\n| KEEP abbrev, airport, region, city, city_location', + ], +}; + +const stIntersectsDefinition: FunctionDefinition = { + type: 'eval', + name: 'st_intersects', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.st_intersects', { + defaultMessage: + 'Returns true if two geometries intersect.\nThey intersect if they have any point in common, including their interior points\n(points along lines or within polygons).\nThis is the inverse of the <> function.\nIn mathematical terms: ST_Intersects(A, B) ⇔ A ⋂ B ≠ ∅', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'geomA', + type: 'cartesian_point', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'cartesian_point', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_point', + optional: false, + }, + { + name: 'geomB', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_point', + optional: false, + }, + { + name: 'geomB', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_shape', + optional: false, + }, + { + name: 'geomB', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_shape', + optional: false, + }, + { + name: 'geomB', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM airports\n| WHERE ST_INTERSECTS(location, TO_GEOSHAPE("POLYGON((42 14, 43 14, 43 15, 42 15, 42 14))"))', + ], +}; + +const stWithinDefinition: FunctionDefinition = { + type: 'eval', + name: 'st_within', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.st_within', { + defaultMessage: + 'Returns whether the first geometry is within the second geometry.\nThis is the inverse of the <> function.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'geomA', + type: 'cartesian_point', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'cartesian_point', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'cartesian_shape', + optional: false, + }, + { + name: 'geomB', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_point', + optional: false, + }, + { + name: 'geomB', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_point', + optional: false, + }, + { + name: 'geomB', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_shape', + optional: false, + }, + { + name: 'geomB', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'geomA', + type: 'geo_shape', + optional: false, + }, + { + name: 'geomB', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'boolean', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM airport_city_boundaries\n| WHERE ST_WITHIN(city_boundary, TO_GEOSHAPE("POLYGON((109.1 18.15, 109.6 18.15, 109.6 18.65, 109.1 18.65, 109.1 18.15))"))\n| KEEP abbrev, airport, region, city, city_location', + ], +}; + +const stXDefinition: FunctionDefinition = { + type: 'eval', + name: 'st_x', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.st_x', { + defaultMessage: + 'Extracts the `x` coordinate from the supplied point.\nIf the points is of type `geo_point` this is equivalent to extracting the `longitude` value.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'point', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'point', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW point = TO_GEOPOINT("POINT(42.97109629958868 14.7552534006536)")\n| EVAL x = ST_X(point), y = ST_Y(point)', + ], +}; + +const stYDefinition: FunctionDefinition = { + type: 'eval', + name: 'st_y', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.st_y', { + defaultMessage: + 'Extracts the `y` coordinate from the supplied point.\nIf the points is of type `geo_point` this is equivalent to extracting the `latitude` value.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'point', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'point', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW point = TO_GEOPOINT("POINT(42.97109629958868 14.7552534006536)")\n| EVAL x = ST_X(point), y = ST_Y(point)', + ], +}; + +const startsWithDefinition: FunctionDefinition = { + type: 'eval', + name: 'starts_with', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.starts_with', { + defaultMessage: + 'Returns a boolean that indicates whether a keyword string starts with another string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'str', + type: 'string', + optional: false, + }, + { + name: 'prefix', + type: 'string', + optional: false, + }, + ], + returnType: 'boolean', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['FROM employees\n| KEEP last_name\n| EVAL ln_S = STARTS_WITH(last_name, "B")'], +}; + +const substringDefinition: FunctionDefinition = { + type: 'eval', + name: 'substring', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.substring', { + defaultMessage: + 'Returns a substring of a string, specified by a start position and an optional length', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + { + name: 'start', + type: 'number', + optional: false, + }, + { + name: 'length', + type: 'number', + optional: true, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'FROM employees\n| KEEP last_name\n| EVAL ln_sub = SUBSTRING(last_name, 1, 3)', + 'FROM employees\n| KEEP last_name\n| EVAL ln_sub = SUBSTRING(last_name, -3, 3)', + 'FROM employees\n| KEEP last_name\n| EVAL ln_sub = SUBSTRING(last_name, 2)', + ], +}; + +const tanDefinition: FunctionDefinition = { + type: 'eval', + name: 'tan', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.tan', { + defaultMessage: 'Returns the Tangent trigonometric function of an angle.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'angle', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8 \n| EVAL tan=TAN(a)'], +}; + +const tanhDefinition: FunctionDefinition = { + type: 'eval', + name: 'tanh', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.tanh', { + defaultMessage: 'Returns the Tangent hyperbolic function of an angle.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'angle', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=1.8 \n| EVAL tanh=TANH(a)'], +}; + +const tauDefinition: FunctionDefinition = { + type: 'eval', + name: 'tau', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.tau', { + defaultMessage: "Returns the ratio of a circle's circumference to its radius.", + }), + alias: undefined, + signatures: [ + { + params: [], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW TAU()'], +}; + +const toBase64Definition: FunctionDefinition = { + type: 'eval', + name: 'to_base64', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_base64', { + defaultMessage: 'Encode a string to a base64 string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['row a = "elastic" \n| eval e = to_base64(a)'], +}; + +const toBooleanDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_boolean', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_boolean', { + defaultMessage: + 'Converts an input value to a boolean value.\nA string value of *true* will be case-insensitive converted to the Boolean *true*.\nFor anything else, including the empty string, the function will return *false*.\nThe numerical value of *0* will be converted to *false*, anything else will be converted to *true*.', + }), + alias: ['to_bool'], + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'boolean', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'boolean', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW str = ["true", "TRuE", "false", "", "yes", "1"]\n| EVAL bool = TO_BOOLEAN(str)'], +}; + +const toCartesianpointDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_cartesianpoint', + description: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.definitions.to_cartesianpoint', + { defaultMessage: - 'Combines the values from two multivalued fields with a delimiter that joins them together.', - }), - signatures: [ - { - params: [ - { name: 'mvLeft', type: 'string' as const }, - { name: 'mvRight', type: 'string' as const }, - { name: 'delim', type: 'string' as const }, - ], - returnType: 'string' as const, - examples: [ - 'ROW a = ["x", "y", "z"], b = ["1", "2"] \n| EVAL c = mv_zip(a, b, "-") \n| KEEP a, b, c', - ], - }, - ], - }, - { - name: 'pi', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.piDoc', { - defaultMessage: 'The ratio of a circle’s circumference to its diameter.', - }), - signatures: [ - { - params: [], - returnType: 'number' as const, - examples: ['row a = 1 | eval pi()'], - }, - ], - }, - { - name: 'e', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.eDoc', { - defaultMessage: 'Euler’s number.', - }), - signatures: [ - { - params: [], - returnType: 'number' as const, - examples: ['row a = 1 | eval e()'], - }, - ], - }, - { - name: 'tau', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.tauDoc', { - defaultMessage: 'The ratio of a circle’s circumference to its radius.', - }), - signatures: [ - { - params: [], - returnType: 'number' as const, - examples: ['row a = 1 | eval tau()'], - }, - ], - }, - // begin spatial functions - { - name: 'st_contains', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.stContainsDoc', { - defaultMessage: 'Returns whether the first geometry contains the second geometry.', - }), - signatures: [ - { - params: [ - { - name: 'geomA', - type: 'geo_point' as const, - }, - { - name: 'geomB', - type: 'geo_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_contains(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'geo_point' as const, - }, - { - name: 'geomB', - type: 'geo_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_contains(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'geo_shape' as const, - }, - { - name: 'geomB', - type: 'geo_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_contains(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'geo_shape' as const, - }, - { - name: 'geomB', - type: 'geo_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_contains(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_point' as const, - }, - { - name: 'geomB', - type: 'cartesian_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_contains(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_point' as const, - }, - { - name: 'geomB', - type: 'cartesian_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_contains(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_shape' as const, - }, - { - name: 'geomB', - type: 'cartesian_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_contains(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_shape' as const, - }, - { - name: 'geomB', - type: 'cartesian_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_contains(geometryA, geometryB)'], - }, - ], - }, - { - name: 'st_within', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.stWithinDoc', { - defaultMessage: 'Returns whether the first geometry is within the second geometry.', - }), - signatures: [ - { - params: [ - { - name: 'geomA', - type: 'geo_point' as const, - }, - { - name: 'geomB', - type: 'geo_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_within(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'geo_point' as const, - }, - { - name: 'geomB', - type: 'geo_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_within(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'geo_shape' as const, - }, - { - name: 'geomB', - type: 'geo_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_within(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'geo_shape' as const, - }, - { - name: 'geomB', - type: 'geo_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_within(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_point' as const, - }, - { - name: 'geomB', - type: 'cartesian_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_within(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_point' as const, - }, - { - name: 'geomB', - type: 'cartesian_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_within(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_shape' as const, - }, - { - name: 'geomB', - type: 'cartesian_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_within(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_shape' as const, - }, - { - name: 'geomB', - type: 'cartesian_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_within(geometryA, geometryB)'], - }, - ], - }, - { - name: 'st_disjoint', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.stDisjointDoc', { - defaultMessage: 'Returns whether the two geometries or geometry columns are disjoint.', - }), - signatures: [ - { - params: [ - { - name: 'geomA', - type: 'geo_point' as const, - }, - { - name: 'geomB', - type: 'geo_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_disjoint(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'geo_point' as const, - }, - { - name: 'geomB', - type: 'geo_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_disjoint(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'geo_shape' as const, - }, - { - name: 'geomB', - type: 'geo_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_disjoint(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'geo_shape' as const, - }, - { - name: 'geomB', - type: 'geo_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_disjoint(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_point' as const, - }, - { - name: 'geomB', - type: 'cartesian_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_disjoint(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_point' as const, - }, - { - name: 'geomB', - type: 'cartesian_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_disjoint(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_shape' as const, - }, - { - name: 'geomB', - type: 'cartesian_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_disjoint(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_shape' as const, - }, - { - name: 'geomB', - type: 'cartesian_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_disjoint(geometryA, geometryB)'], - }, - ], - }, - { - name: 'st_intersects', - description: i18n.translate( - 'kbn-esql-validation-autocomplete.esql.definitions.stIntersectsDoc', - { - defaultMessage: - 'Returns true if two geometries intersect. They intersect if they have any point in common, including their interior points (points along lines or within polygons).', - } - ), - signatures: [ - { - params: [ - { - name: 'geomA', - type: 'geo_point' as const, - }, - { - name: 'geomB', - type: 'geo_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_intersects(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'geo_point' as const, - }, - { - name: 'geomB', - type: 'geo_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_intersects(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'geo_shape' as const, - }, - { - name: 'geomB', - type: 'geo_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_intersects(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'geo_shape' as const, - }, - { - name: 'geomB', - type: 'geo_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_intersects(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_point' as const, - }, - { - name: 'geomB', - type: 'cartesian_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_intersects(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_point' as const, - }, - { - name: 'geomB', - type: 'cartesian_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_intersects(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_shape' as const, - }, - { - name: 'geomB', - type: 'cartesian_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_intersects(geometryA, geometryB)'], - }, - { - params: [ - { - name: 'geomA', - type: 'cartesian_shape' as const, - }, - { - name: 'geomB', - type: 'cartesian_shape' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_intersects(geometryA, geometryB)'], - }, - ], - }, - { - name: 'st_x', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.stXDoc', { + 'Converts an input value to a `cartesian_point` value.\nA string will only be successfully converted if it respects WKT Point format.', + } + ), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'cartesian_point', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW wkt = ["POINT(4297.11 -1475.53)", "POINT(7580.93 2272.77)"]\n| MV_EXPAND wkt\n| EVAL pt = TO_CARTESIANPOINT(wkt)', + ], +}; + +const toCartesianshapeDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_cartesianshape', + description: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.definitions.to_cartesianshape', + { defaultMessage: - 'Extracts the x coordinate from the supplied point. If the points is of type geo_point this is equivalent to extracting the longitude value.', - }), - signatures: [ - { - params: [ - { - name: 'point', - type: 'geo_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_x(point)'], - }, - { - params: [ - { - name: 'point', - type: 'cartesian_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_x(point)'], - }, - ], - }, - { - name: 'st_y', - description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.stYDoc', { + 'Converts an input value to a `cartesian_shape` value.\nA string will only be successfully converted if it respects WKT format.', + } + ), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW wkt = ["POINT(4297.11 -1475.53)", "POLYGON ((3339584.72 1118889.97, 4452779.63 4865942.27, 2226389.81 4865942.27, 1113194.90 2273030.92, 3339584.72 1118889.97))"]\n| MV_EXPAND wkt\n| EVAL geom = TO_CARTESIANSHAPE(wkt)', + ], +}; + +const toDatetimeDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_datetime', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_datetime', { + defaultMessage: + "Converts an input value to a date value.\nA string will only be successfully converted if it's respecting the format `yyyy-MM-dd'T'HH:mm:ss.SSS'Z'`.\nTo convert dates in other formats, use <>.", + }), + alias: ['to_dt'], + signatures: [ + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'date', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'date', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW string = ["1953-09-02T00:00:00.000Z", "1964-06-02T00:00:00.000Z", "1964-06-02 00:00:00"]\n| EVAL datetime = TO_DATETIME(string)', + 'ROW int = [0, 1]\n| EVAL dt = TO_DATETIME(int)', + ], +}; + +const toDegreesDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_degrees', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_degrees', { + defaultMessage: 'Converts a number in radians to degrees.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW rad = [1.57, 3.14, 4.71]\n| EVAL deg = TO_DEGREES(rad)'], +}; + +const toDoubleDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_double', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_double', { + defaultMessage: + 'Converts an input value to a double value. If the input parameter is of a date type,\nits value will be interpreted as milliseconds since the Unix epoch,\nconverted to double. Boolean *true* will be converted to double *1.0*, *false* to *0.0*.', + }), + alias: ['to_dbl'], + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW str1 = "5.20128E11", str2 = "foo"\n| EVAL dbl = TO_DOUBLE("520128000000"), dbl1 = TO_DOUBLE(str1), dbl2 = TO_DOUBLE(str2)', + ], +}; + +const toGeopointDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_geopoint', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_geopoint', { + defaultMessage: + 'Converts an input value to a `geo_point` value.\nA string will only be successfully converted if it respects WKT Point format.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'geo_point', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'geo_point', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW wkt = "POINT(42.97109630194 14.7552534413725)"\n| EVAL pt = TO_GEOPOINT(wkt)'], +}; + +const toGeoshapeDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_geoshape', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_geoshape', { + defaultMessage: + 'Converts an input value to a `geo_shape` value.\nA string will only be successfully converted if it respects WKT format.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'geo_shape', + }, + { + params: [ + { + name: 'field', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'geo_shape', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'geo_shape', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))"\n| EVAL geom = TO_GEOSHAPE(wkt)', + ], +}; + +const toIntegerDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_integer', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_integer', { + defaultMessage: + 'Converts an input value to an integer value.\nIf the input parameter is of a date type, its value will be interpreted as milliseconds\nsince the Unix epoch, converted to integer.\nBoolean *true* will be converted to integer *1*, *false* to *0*.', + }), + alias: ['to_int'], + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW long = [5013792, 2147483647, 501379200000]\n| EVAL int = TO_INTEGER(long)'], +}; + +const toIpDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_ip', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_ip', { + defaultMessage: 'Converts an input string to an IP value.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'ip', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'ip', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW str1 = "1.1.1.1", str2 = "foo"\n| EVAL ip1 = TO_IP(str1), ip2 = TO_IP(str2)\n| WHERE CIDR_MATCH(ip1, "1.0.0.0/8")', + ], +}; + +const toLongDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_long', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_long', { + defaultMessage: + 'Converts an input value to a long value. If the input parameter is of a date type,\nits value will be interpreted as milliseconds since the Unix epoch, converted to long.\nBoolean *true* will be converted to long *1*, *false* to *0*.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW str1 = "2147483648", str2 = "2147483648.2", str3 = "foo"\n| EVAL long1 = TO_LONG(str1), long2 = TO_LONG(str2), long3 = TO_LONG(str3)', + ], +}; + +const toLowerDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_lower', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_lower', { + defaultMessage: 'Returns a new string representing the input string converted to lower case.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'str', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW message = "Some Text"\n| EVAL message_lower = TO_LOWER(message)'], +}; + +const toRadiansDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_radians', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_radians', { + defaultMessage: 'Converts a number in degrees to radians.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'number', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW deg = [90.0, 180.0, 270.0]\n| EVAL rad = TO_RADIANS(deg)'], +}; + +const toStringDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_string', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_string', { + defaultMessage: 'Converts an input value into a string.', + }), + alias: ['to_str'], + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'ip', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW a=10\n| EVAL j = TO_STRING(a)', 'ROW a=[10, 9, 8]\n| EVAL j = TO_STRING(a)'], +}; + +const toUnsignedLongDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_unsigned_long', + description: i18n.translate( + 'kbn-esql-validation-autocomplete.esql.definitions.to_unsigned_long', + { defaultMessage: - 'Extracts the y coordinate from the supplied point. If the points is of type geo_point this is equivalent to extracting the latitude value.', - }), - signatures: [ - { - params: [ - { - name: 'point', - type: 'geo_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_y(point)'], - }, - { - params: [ - { - name: 'point', - type: 'cartesian_point' as const, - }, - ], - returnType: 'boolean' as const, - examples: ['from index | eval st_y(point)'], - }, - ], - }, -] - .sort(({ name: a }, { name: b }) => a.localeCompare(b)) - .map((def) => ({ - ...def, - supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], - supportedOptions: ['by'], - type: 'eval', - })); + 'Converts an input value to an unsigned long value. If the input parameter is of a date type,\nits value will be interpreted as milliseconds since the Unix epoch, converted to unsigned long.\nBoolean *true* will be converted to unsigned long *1*, *false* to *0*.', + } + ), + alias: ['to_ul', 'to_ulong'], + signatures: [ + { + params: [ + { + name: 'field', + type: 'boolean', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'date', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'number', + optional: false, + }, + ], + returnType: 'number', + }, + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'number', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW str1 = "2147483648", str2 = "2147483648.2", str3 = "foo"\n| EVAL long1 = TO_UNSIGNED_LONG(str1), long2 = TO_ULONG(str2), long3 = TO_UL(str3)', + ], +}; + +const toUpperDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_upper', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_upper', { + defaultMessage: 'Returns a new string representing the input string converted to upper case.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'str', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW message = "Some Text"\n| EVAL message_upper = TO_UPPER(message)'], +}; + +const toVersionDefinition: FunctionDefinition = { + type: 'eval', + name: 'to_version', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.to_version', { + defaultMessage: 'Converts an input string to a version value.', + }), + alias: ['to_ver'], + signatures: [ + { + params: [ + { + name: 'field', + type: 'string', + optional: false, + }, + ], + returnType: 'version', + }, + { + params: [ + { + name: 'field', + type: 'version', + optional: false, + }, + ], + returnType: 'version', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: ['ROW v = TO_VERSION("1.2.3")'], +}; + +const trimDefinition: FunctionDefinition = { + type: 'eval', + name: 'trim', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.trim', { + defaultMessage: 'Removes leading and trailing whitespaces from a string.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'string', + type: 'string', + optional: false, + }, + ], + returnType: 'string', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'ROW message = " some text ", color = " red "\n| EVAL message = TRIM(message)\n| EVAL color = TRIM(color)', + ], +}; + +const caseDefinition: FunctionDefinition = { + type: 'eval', + name: 'case', + description: i18n.translate('kbn-esql-validation-autocomplete.esql.definitions.case', { + defaultMessage: + 'Accepts pairs of conditions and values. The function returns the value that belongs to the first condition that evaluates to `true`. If the number of arguments is odd, the last argument is the default value which is returned when no condition matches.', + }), + alias: undefined, + signatures: [ + { + params: [ + { + name: 'condition', + type: 'boolean', + }, + { + name: 'value', + type: 'any', + }, + ], + minParams: 2, + returnType: 'any', + }, + ], + supportedCommands: ['stats', 'eval', 'where', 'row', 'sort'], + supportedOptions: ['by'], + validate: undefined, + examples: [ + 'from index | eval type = case(languages <= 1, "monolingual", languages <= 2, "bilingual", "polyglot")', + ], +}; +export const evalFunctionDefinitions = [ + absDefinition, + acosDefinition, + asinDefinition, + atanDefinition, + atan2Definition, + cbrtDefinition, + ceilDefinition, + cidrMatchDefinition, + coalesceDefinition, + concatDefinition, + cosDefinition, + coshDefinition, + dateDiffDefinition, + dateExtractDefinition, + dateFormatDefinition, + dateParseDefinition, + dateTruncDefinition, + eDefinition, + endsWithDefinition, + floorDefinition, + fromBase64Definition, + greatestDefinition, + leastDefinition, + leftDefinition, + lengthDefinition, + locateDefinition, + logDefinition, + log10Definition, + ltrimDefinition, + mvAvgDefinition, + mvConcatDefinition, + mvCountDefinition, + mvDedupeDefinition, + mvFirstDefinition, + mvLastDefinition, + mvMaxDefinition, + mvMedianDefinition, + mvMinDefinition, + mvSliceDefinition, + mvSortDefinition, + mvSumDefinition, + mvZipDefinition, + nowDefinition, + piDefinition, + powDefinition, + replaceDefinition, + rightDefinition, + roundDefinition, + rtrimDefinition, + signumDefinition, + sinDefinition, + sinhDefinition, + splitDefinition, + sqrtDefinition, + stContainsDefinition, + stDisjointDefinition, + stIntersectsDefinition, + stWithinDefinition, + stXDefinition, + stYDefinition, + startsWithDefinition, + substringDefinition, + tanDefinition, + tanhDefinition, + tauDefinition, + toBase64Definition, + toBooleanDefinition, + toCartesianpointDefinition, + toCartesianshapeDefinition, + toDatetimeDefinition, + toDegreesDefinition, + toDoubleDefinition, + toGeopointDefinition, + toGeoshapeDefinition, + toIntegerDefinition, + toIpDefinition, + toLongDefinition, + toLowerDefinition, + toRadiansDefinition, + toStringDefinition, + toUnsignedLongDefinition, + toUpperDefinition, + toVersionDefinition, + trimDefinition, + caseDefinition, +]; diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/grouping.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/grouping.ts index fc725cbe0b429..79ac91d14403a 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/grouping.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/grouping.ts @@ -27,7 +27,6 @@ export const groupingFunctionDefinitions: FunctionDefinition[] = [ { name: 'buckets', type: 'time_literal', constantOnly: true }, ], returnType: 'date', - examples: ['from index | eval hd = bucket(hire_date, 1 hour)'], }, { params: [ @@ -35,7 +34,6 @@ export const groupingFunctionDefinitions: FunctionDefinition[] = [ { name: 'buckets', type: 'number', constantOnly: true }, ], returnType: 'number', - examples: ['from index | eval hd = bucket(bytes, 1 hour)'], }, { params: [ @@ -45,9 +43,6 @@ export const groupingFunctionDefinitions: FunctionDefinition[] = [ { name: 'endDate', type: 'string', constantOnly: true }, ], returnType: 'date', - examples: [ - 'from index | eval hd = bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', - ], }, { params: [ @@ -57,9 +52,6 @@ export const groupingFunctionDefinitions: FunctionDefinition[] = [ { name: 'endDate', type: 'date', constantOnly: true }, ], returnType: 'date', - examples: [ - 'from index | eval hd = bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', - ], }, { params: [ @@ -69,9 +61,6 @@ export const groupingFunctionDefinitions: FunctionDefinition[] = [ { name: 'endDate', type: 'date', constantOnly: true }, ], returnType: 'date', - examples: [ - 'from index | eval hd = bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', - ], }, { params: [ @@ -81,9 +70,6 @@ export const groupingFunctionDefinitions: FunctionDefinition[] = [ { name: 'endDate', type: 'string', constantOnly: true }, ], returnType: 'date', - examples: [ - 'from index | eval hd = bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', - ], }, { params: [ @@ -93,8 +79,14 @@ export const groupingFunctionDefinitions: FunctionDefinition[] = [ { name: 'endValue', type: 'number', constantOnly: true }, ], returnType: 'number', - examples: ['from index | eval bs = bucket(bytes, 20, 25324, 74999)'], }, ], + examples: [ + 'from index | eval hd = bucket(bytes, 1 hour)', + 'from index | eval hd = bucket(hire_date, 1 hour)', + 'from index | eval hd = bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', + 'from index | eval hd = bucket(hire_date, 20, "1985-01-01T00:00:00Z", "1986-01-01T00:00:00Z")', + 'from index | eval bs = bucket(bytes, 20, 25324, 74999)', + ], }, ]; diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/helpers.ts index 89485f2174a42..0380a07385a73 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/helpers.ts @@ -19,7 +19,7 @@ export function getFunctionSignatures( { name, signatures }: FunctionDefinition, { withTypes }: { withTypes: boolean } = { withTypes: true } ) { - return signatures.map(({ params, returnType, minParams, examples }) => { + return signatures.map(({ params, returnType, minParams }) => { // for functions with a minimum number of args, repeat the last arg multiple times // just make sure to compute the right number of args to add const minParamsToAdd = Math.max((minParams || 0) - params.length, 0); @@ -30,7 +30,6 @@ export function getFunctionSignatures( .join(', ')}${handleAdditionalArgs(minParamsToAdd > 0, extraArg, withTypes)})${ withTypes ? `: ${returnType}` : '' }`, - examples, }; }); } diff --git a/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts b/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts index 0a614620ac08b..dbfbf08cca08a 100644 --- a/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts +++ b/packages/kbn-esql-validation-autocomplete/src/definitions/types.ts @@ -8,21 +8,30 @@ import type { ESQLCommand, ESQLCommandOption, ESQLFunction, ESQLMessage } from '@kbn/esql-ast'; +export const supportedFieldTypes = [ + 'number', + 'date', + 'string', + 'boolean', + 'ip', + 'cartesian_point', + 'cartesian_shape', + 'geo_point', + 'geo_shape', + 'version', +] as const; + +export const isSupportedFieldType = (type: string): type is SupportedFieldType => + supportedFieldTypes.includes(type as SupportedFieldType); + +export type SupportedFieldType = typeof supportedFieldTypes[number]; + export type FunctionParameterType = - | 'number' - | 'date' - | 'string' - | 'boolean' + | SupportedFieldType | 'null' | 'any' - | 'ip' | 'chrono_literal' | 'time_literal' - | 'cartesian_point' - | 'cartesian_shape' - | 'geo_point' - | 'geo_shape' - | 'version' | 'number[]' | 'string[]' | 'boolean[]' @@ -88,8 +97,8 @@ export interface FunctionDefinition { }>; minParams?: number; returnType: FunctionReturnType; - examples?: string[]; }>; + examples?: string[]; validate?: (fnDef: ESQLFunction) => ESQLMessage[]; } diff --git a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts index 5689b81c1b54d..e17788eba21b8 100644 --- a/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/shared/helpers.ts @@ -20,7 +20,7 @@ import type { import { statsAggregationFunctionDefinitions } from '../definitions/aggs'; import { builtinFunctions } from '../definitions/builtin'; import { commandDefinitions } from '../definitions/commands'; -import { evalFunctionsDefinitions } from '../definitions/functions'; +import { evalFunctionDefinitions } from '../definitions/functions'; import { groupingFunctionDefinitions } from '../definitions/grouping'; import { getFunctionSignatures } from '../definitions/helpers'; import { chronoLiterals, timeLiterals } from '../definitions/literals'; @@ -132,7 +132,7 @@ function buildFunctionLookup() { if (!fnLookups) { fnLookups = builtinFunctions .concat( - evalFunctionsDefinitions, + evalFunctionDefinitions, statsAggregationFunctionDefinitions, groupingFunctionDefinitions ) diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json index 14b55dee73cd7..89c267dd01f2d 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json +++ b/packages/kbn-esql-validation-autocomplete/src/validation/esql_validation_meta_tests.json @@ -17,21 +17,17 @@ "type": "date" }, { - "name": "booleanField", - "type": "boolean" + "name": "stringField", + "type": "string" }, { - "name": "versionField", - "type": "version" + "name": "booleanField", + "type": "boolean" }, { "name": "ipField", "type": "ip" }, - { - "name": "stringField", - "type": "string" - }, { "name": "cartesianPointField", "type": "cartesian_point" @@ -48,6 +44,10 @@ "name": "geoShapeField", "type": "geo_shape" }, + { + "name": "versionField", + "type": "version" + }, { "name": "any#Char$Field", "type": "number" @@ -3972,82 +3972,82 @@ "warning": [] }, { - "query": "from a_index | where booleanField IS NULL", + "query": "from a_index | where stringField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS null", + "query": "from a_index | where stringField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField is null", + "query": "from a_index | where stringField is null", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField is NULL", + "query": "from a_index | where stringField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS NOT NULL", + "query": "from a_index | where stringField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS NOT null", + "query": "from a_index | where stringField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS not NULL", + "query": "from a_index | where stringField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField Is nOt NuLL", + "query": "from a_index | where stringField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS NULL", + "query": "from a_index | where booleanField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS null", + "query": "from a_index | where booleanField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where versionField is null", + "query": "from a_index | where booleanField is null", "error": [], "warning": [] }, { - "query": "from a_index | where versionField is NULL", + "query": "from a_index | where booleanField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS NOT NULL", + "query": "from a_index | where booleanField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS NOT null", + "query": "from a_index | where booleanField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS not NULL", + "query": "from a_index | where booleanField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where versionField Is nOt NuLL", + "query": "from a_index | where booleanField Is nOt NuLL", "error": [], "warning": [] }, @@ -4091,46 +4091,6 @@ "error": [], "warning": [] }, - { - "query": "from a_index | where stringField IS NULL", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where stringField IS null", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where stringField is null", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where stringField is NULL", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where stringField IS NOT NULL", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where stringField IS NOT null", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where stringField IS not NULL", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where stringField Is nOt NuLL", - "error": [], - "warning": [] - }, { "query": "from a_index | where cartesianPointField IS NULL", "error": [], @@ -4291,6 +4251,46 @@ "error": [], "warning": [] }, + { + "query": "from a_index | where versionField IS NULL", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where versionField IS null", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where versionField is null", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where versionField is NULL", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where versionField IS NOT NULL", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where versionField IS NOT null", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where versionField IS not NULL", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where versionField Is nOt NuLL", + "error": [], + "warning": [] + }, { "query": "from a_index | where stringField == \"a\" or null", "error": [], @@ -4493,72 +4493,72 @@ "warning": [] }, { - "query": "from a_index | eval booleanField IS NULL", + "query": "from a_index | eval stringField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS null", + "query": "from a_index | eval stringField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField is null", + "query": "from a_index | eval stringField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField is NULL", + "query": "from a_index | eval stringField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS NOT NULL", + "query": "from a_index | eval stringField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS NOT null", + "query": "from a_index | eval stringField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS not NULL", + "query": "from a_index | eval stringField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS NULL", + "query": "from a_index | eval booleanField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS null", + "query": "from a_index | eval booleanField IS null", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField is null", + "query": "from a_index | eval booleanField is null", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField is NULL", + "query": "from a_index | eval booleanField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS NOT NULL", + "query": "from a_index | eval booleanField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS NOT null", + "query": "from a_index | eval booleanField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS not NULL", + "query": "from a_index | eval booleanField IS not NULL", "error": [], "warning": [] }, @@ -4597,41 +4597,6 @@ "error": [], "warning": [] }, - { - "query": "from a_index | eval stringField IS NULL", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval stringField IS null", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval stringField is null", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval stringField is NULL", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval stringField IS NOT NULL", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval stringField IS NOT null", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval stringField IS not NULL", - "error": [], - "warning": [] - }, { "query": "from a_index | eval cartesianPointField IS NULL", "error": [], @@ -4772,6 +4737,41 @@ "error": [], "warning": [] }, + { + "query": "from a_index | eval versionField IS NULL", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval versionField IS null", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval versionField is null", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval versionField is NULL", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval versionField IS NOT NULL", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval versionField IS NOT null", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval versionField IS not NULL", + "error": [], + "warning": [] + }, { "query": "from a_index | eval - numberField", "error": [], @@ -9000,6 +9000,20 @@ "error": [], "warning": [] }, + { + "query": "from a_index | eval var = date_diff(\"year\", to_datetime(dateField), to_datetime(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval date_diff(booleanField, booleanField, booleanField)", + "error": [ + "Argument of [date_diff] must be [string], found value [booleanField] type [boolean]", + "Argument of [date_diff] must be [date], found value [booleanField] type [boolean]", + "Argument of [date_diff] must be [date], found value [booleanField] type [boolean]" + ], + "warning": [] + }, { "query": "row var = abs(5)", "error": [], @@ -9076,51 +9090,82 @@ "warning": [] }, { - "query": "row var = acos(5)", - "error": [], - "warning": [] - }, - { - "query": "row acos(5)", + "query": "row var = abs(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = acos(to_integer(\"a\"))", - "error": [], + "query": "row var = abs(true)", + "error": [ + "Argument of [abs] must be [number], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = acos(\"a\")", + "query": "from a_index | where abs(booleanField) > 0", "error": [ - "Argument of [acos] must be [number], found value [\"a\"] type [string]" + "Argument of [abs] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where acos(numberField) > 0", + "query": "from a_index | eval var = abs(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where acos(stringField) > 0", + "query": "from a_index | eval abs(booleanField)", "error": [ - "Argument of [acos] must be [number], found value [stringField] type [string]" + "Argument of [abs] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = acos(numberField)", + "query": "row var = acos(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval acos(numberField)", + "query": "row acos(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = acos(to_integer(stringField))", + "query": "row var = acos(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = acos(\"a\")", + "error": [ + "Argument of [acos] must be [number], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | where acos(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where acos(stringField) > 0", + "error": [ + "Argument of [acos] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = acos(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval acos(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = acos(to_integer(stringField))", "error": [], "warning": [] }, @@ -9150,6 +9195,37 @@ "error": [], "warning": [] }, + { + "query": "row var = acos(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = acos(true)", + "error": [ + "Argument of [acos] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where acos(booleanField) > 0", + "error": [ + "Argument of [acos] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = acos(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval acos(booleanField)", + "error": [ + "Argument of [acos] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, { "query": "row var = asin(5)", "error": [], @@ -9225,6 +9301,37 @@ "error": [], "warning": [] }, + { + "query": "row var = asin(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = asin(true)", + "error": [ + "Argument of [asin] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where asin(booleanField) > 0", + "error": [ + "Argument of [asin] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = asin(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval asin(booleanField)", + "error": [ + "Argument of [asin] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, { "query": "row var = atan(5)", "error": [], @@ -9300,6 +9407,37 @@ "error": [], "warning": [] }, + { + "query": "row var = atan(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = atan(true)", + "error": [ + "Argument of [atan] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where atan(booleanField) > 0", + "error": [ + "Argument of [atan] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = atan(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval atan(booleanField)", + "error": [ + "Argument of [atan] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, { "query": "row var = atan2(5, 5)", "error": [], @@ -9371,6 +9509,40 @@ "error": [], "warning": [] }, + { + "query": "row var = atan2(to_integer(true), to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = atan2(true, true)", + "error": [ + "Argument of [atan2] must be [number], found value [true] type [boolean]", + "Argument of [atan2] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where atan2(booleanField, booleanField) > 0", + "error": [ + "Argument of [atan2] must be [number], found value [booleanField] type [boolean]", + "Argument of [atan2] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = atan2(to_integer(booleanField), to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval atan2(booleanField, booleanField)", + "error": [ + "Argument of [atan2] must be [number], found value [booleanField] type [boolean]", + "Argument of [atan2] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, { "query": "row var = case(true, \"a\")", "error": [], @@ -9396,6 +9568,13 @@ "error": [], "warning": [] }, + { + "query": "row var = case(to_cartesianpoint(\"POINT (30 10)\"), true)", + "error": [ + "Argument of [case] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, { "query": "row var = ceil(5)", "error": [], @@ -9471,6 +9650,37 @@ "error": [], "warning": [] }, + { + "query": "row var = ceil(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = ceil(true)", + "error": [ + "Argument of [ceil] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where ceil(booleanField) > 0", + "error": [ + "Argument of [ceil] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = ceil(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval ceil(booleanField)", + "error": [ + "Argument of [ceil] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, { "query": "row var = cidr_match(to_ip(\"127.0.0.1\"), \"a\")", "error": [], @@ -9522,6 +9732,32 @@ "error": [], "warning": [] }, + { + "query": "row var = cidr_match(to_ip(to_ip(\"127.0.0.1\")), to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = cidr_match(true, true)", + "error": [ + "Argument of [cidr_match] must be [ip], found value [true] type [boolean]", + "Argument of [cidr_match] must be [string], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = cidr_match(to_ip(ipField), to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval cidr_match(booleanField, booleanField)", + "error": [ + "Argument of [cidr_match] must be [ip], found value [booleanField] type [boolean]", + "Argument of [cidr_match] must be [string], found value [booleanField] type [boolean]" + ], + "warning": [] + }, { "query": "row var = coalesce(\"a\")", "error": [], @@ -9548,6820 +9784,14400 @@ "warning": [] }, { - "query": "row var = concat(\"a\", \"a\")", + "query": "row var = coalesce(true)", "error": [], "warning": [] }, { - "query": "row concat(\"a\", \"a\")", + "query": "row coalesce(true)", "error": [], "warning": [] }, { - "query": "row var = concat(to_string(\"a\"), to_string(\"a\"))", + "query": "row var = coalesce(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = concat(5, 5)", - "error": [ - "Argument of [concat] must be [string], found value [5] type [number]" - ], + "query": "row var = coalesce(true, true)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(concat(stringField, stringField)) > 0", + "query": "row coalesce(true, true)", "error": [], "warning": [] }, { - "query": "from a_index | where length(concat(numberField, numberField)) > 0", - "error": [ - "Argument of [concat] must be [string], found value [numberField] type [number]" - ], + "query": "row var = coalesce(to_boolean(true), to_boolean(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = concat(stringField, stringField)", + "query": "row var = coalesce(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval concat(stringField, stringField)", + "query": "row coalesce(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = concat(to_string(stringField), to_string(stringField))", + "query": "row var = coalesce(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval concat(numberField, numberField)", - "error": [ - "Argument of [concat] must be [string], found value [numberField] type [number]" - ], + "query": "row var = coalesce(5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort concat(stringField, stringField)", + "query": "row coalesce(5, 5)", "error": [], "warning": [] }, { - "query": "row var = cos(5)", + "query": "row var = coalesce(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row cos(5)", + "query": "row var = coalesce(to_string(true))", "error": [], "warning": [] }, { - "query": "row var = cos(to_integer(\"a\"))", + "query": "row var = coalesce(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = cos(\"a\")", - "error": [ - "Argument of [cos] must be [number], found value [\"a\"] type [string]" - ], + "query": "row coalesce(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | where cos(numberField) > 0", + "query": "row var = coalesce(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | where cos(stringField) > 0", - "error": [ - "Argument of [cos] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | where coalesce(numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cos(numberField)", + "query": "from a_index | where coalesce(numberField, numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval cos(numberField)", + "query": "from a_index | where length(coalesce(stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = cos(to_integer(stringField))", + "query": "from a_index | where length(coalesce(stringField, stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval cos(stringField)", - "error": [ - "Argument of [cos] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = coalesce(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval cos(numberField, extraArg)", - "error": [ - "Error: [cos] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval coalesce(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cos(*)", - "error": [ - "Using wildcards (*) in cos is not allowed" - ], + "query": "from a_index | eval var = coalesce(to_boolean(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort cos(numberField)", + "query": "from a_index | eval var = coalesce(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "row var = cosh(5)", + "query": "from a_index | eval coalesce(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "row cosh(5)", + "query": "from a_index | eval var = coalesce(to_boolean(booleanField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = cosh(to_integer(\"a\"))", + "query": "from a_index | eval var = coalesce(numberField)", "error": [], "warning": [] }, { - "query": "row var = cosh(\"a\")", - "error": [ - "Argument of [cosh] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval coalesce(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | where cosh(numberField) > 0", + "query": "from a_index | eval var = coalesce(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where cosh(stringField) > 0", - "error": [ - "Argument of [cosh] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = coalesce(numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cosh(numberField)", + "query": "from a_index | eval coalesce(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(numberField)", + "query": "from a_index | eval var = coalesce(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = cosh(to_integer(stringField))", + "query": "from a_index | eval var = coalesce(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(stringField)", - "error": [ - "Argument of [cosh] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = coalesce(stringField, stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(numberField, extraArg)", - "error": [ - "Error: [cosh] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval coalesce(stringField, stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = cosh(*)", - "error": [ - "Using wildcards (*) in cosh is not allowed" - ], + "query": "from a_index | eval var = coalesce(to_string(booleanField), to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort cosh(numberField)", + "query": "from a_index | sort coalesce(booleanField)", "error": [], "warning": [] }, { - "query": "row var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", now())", + "query": "row var = coalesce(5, true)", "error": [], "warning": [] }, { - "query": "row date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", now())", + "query": "row coalesce(5, true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "query": "row var = coalesce(to_integer(true), to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "query": "row var = coalesce(now())", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(stringField))", + "query": "row coalesce(now())", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(stringField, stringField)", - "error": [ - "Argument of [date_extract] must be [chrono_literal], found value [stringField] type [string]", - "Argument of [date_extract] must be [date], found value [stringField] type [string]" - ], + "query": "row var = coalesce(to_datetime(now()))", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField, extraArg)", - "error": [ - "Error: [date_extract] function expects exactly 2 arguments, got 3." - ], + "query": "row var = coalesce(now(), true)", + "error": [], "warning": [] }, { - "query": "from a_index | sort date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "query": "row coalesce(now(), true)", "error": [], "warning": [] }, { - "query": "row var = date_format(now(), \"a\")", + "query": "row var = coalesce(to_datetime(now()), to_boolean(true))", "error": [], "warning": [] }, { - "query": "row date_format(now(), \"a\")", + "query": "row var = coalesce(\"a\", true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_format(dateField, stringField)", + "query": "row coalesce(\"a\", true)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(dateField, stringField)", + "query": "row var = coalesce(to_string(true), to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_format(to_datetime(stringField), to_string(stringField))", + "query": "row var = coalesce(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(stringField, numberField)", - "error": [ - "Argument of [date_format] must be [date], found value [stringField] type [string]", - "Argument of [date_format] must be [string], found value [numberField] type [number]" - ], + "query": "row coalesce(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(dateField, stringField, extraArg)", - "error": [ - "Error: [date_format] function expects no more than 2 arguments, got 3." - ], + "query": "row var = coalesce(to_ip(to_ip(\"127.0.0.1\")))", + "error": [], "warning": [] }, { - "query": "from a_index | sort date_format(dateField, stringField)", + "query": "row var = coalesce(to_ip(\"127.0.0.1\"), true)", "error": [], "warning": [] }, { - "query": "row var = date_parse(\"a\", \"a\")", + "query": "row coalesce(to_ip(\"127.0.0.1\"), true)", "error": [], "warning": [] }, { - "query": "row date_parse(\"a\", \"a\")", + "query": "row var = coalesce(to_ip(to_ip(\"127.0.0.1\")), to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = date_parse(to_string(\"a\"), to_string(\"a\"))", + "query": "row var = coalesce(to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = date_parse(5, 5)", - "error": [ - "Argument of [date_parse] must be [string], found value [5] type [number]", - "Argument of [date_parse] must be [string], found value [5] type [number]" - ], + "query": "row coalesce(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_parse(stringField, stringField)", + "query": "row var = coalesce(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(stringField, stringField)", + "query": "row var = coalesce(to_cartesianpoint(\"POINT (30 10)\"), true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_parse(to_string(stringField), to_string(stringField))", + "query": "row coalesce(to_cartesianpoint(\"POINT (30 10)\"), true)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(numberField, numberField)", - "error": [ - "Argument of [date_parse] must be [string], found value [numberField] type [number]", - "Argument of [date_parse] must be [string], found value [numberField] type [number]" - ], + "query": "row var = coalesce(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_boolean(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(stringField, stringField, extraArg)", - "error": [ - "Error: [date_parse] function expects exactly 2 arguments, got 3." - ], + "query": "row var = coalesce(to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | sort date_parse(stringField, stringField)", + "query": "row coalesce(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = date_trunc(1 year, now())", + "query": "row var = coalesce(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "row date_trunc(1 year, now())", + "query": "row var = coalesce(to_cartesianshape(\"POINT (30 10)\"), true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_trunc(1 year, dateField)", + "query": "row coalesce(to_cartesianshape(\"POINT (30 10)\"), true)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(1 year, dateField)", + "query": "row var = coalesce(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_trunc(1 year, to_datetime(stringField))", + "query": "row var = coalesce(to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(stringField, stringField)", - "error": [ - "Argument of [date_trunc] must be [time_literal], found value [stringField] type [string]", - "Argument of [date_trunc] must be [date], found value [stringField] type [string]" - ], + "query": "row coalesce(to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(1 year, dateField, extraArg)", - "error": [ - "Error: [date_trunc] function expects exactly 2 arguments, got 3." - ], + "query": "row var = coalesce(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], "warning": [] }, { - "query": "from a_index | sort date_trunc(1 year, dateField)", + "query": "row var = coalesce(to_geopoint(\"POINT (30 10)\"), true)", "error": [], "warning": [] }, { - "query": "row var = e()", + "query": "row coalesce(to_geopoint(\"POINT (30 10)\"), true)", "error": [], "warning": [] }, { - "query": "row e()", + "query": "row var = coalesce(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | where e() > 0", + "query": "row var = coalesce(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = e()", + "query": "row coalesce(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval e()", + "query": "row var = coalesce(to_geoshape(to_geopoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval e(extraArg)", - "error": [ - "Error: [e] function expects exactly 0 arguments, got 1." - ], + "query": "row var = coalesce(to_geoshape(\"POINT (30 10)\"), true)", + "error": [], "warning": [] }, { - "query": "from a_index | sort e()", + "query": "row coalesce(to_geoshape(\"POINT (30 10)\"), true)", "error": [], "warning": [] }, { - "query": "row var = ends_with(\"a\", \"a\")", + "query": "row var = coalesce(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_boolean(true))", "error": [], "warning": [] }, { - "query": "row ends_with(\"a\", \"a\")", + "query": "row var = coalesce(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = ends_with(to_string(\"a\"), to_string(\"a\"))", + "query": "row coalesce(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = ends_with(5, 5)", - "error": [ - "Argument of [ends_with] must be [string], found value [5] type [number]", - "Argument of [ends_with] must be [string], found value [5] type [number]" - ], + "query": "row var = coalesce(to_version(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = ends_with(stringField, stringField)", + "query": "row var = coalesce(to_version(\"1.0.0\"), true)", "error": [], "warning": [] }, { - "query": "from a_index | eval ends_with(stringField, stringField)", + "query": "row coalesce(to_version(\"1.0.0\"), true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ends_with(to_string(stringField), to_string(stringField))", + "query": "row var = coalesce(to_version(\"a\"), to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval ends_with(numberField, numberField)", - "error": [ - "Argument of [ends_with] must be [string], found value [numberField] type [number]", - "Argument of [ends_with] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | where coalesce(numberField, booleanField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval ends_with(stringField, stringField, extraArg)", - "error": [ - "Error: [ends_with] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | where length(coalesce(stringField, booleanField)) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort ends_with(stringField, stringField)", + "query": "from a_index | eval var = coalesce(numberField, booleanField)", "error": [], "warning": [] }, { - "query": "row var = floor(5)", + "query": "from a_index | eval coalesce(numberField, booleanField)", "error": [], "warning": [] }, { - "query": "row floor(5)", + "query": "from a_index | eval var = coalesce(to_integer(booleanField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = floor(to_integer(\"a\"))", + "query": "from a_index | eval var = coalesce(dateField)", "error": [], "warning": [] }, { - "query": "row var = floor(\"a\")", - "error": [ - "Argument of [floor] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval coalesce(dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | where floor(numberField) > 0", + "query": "from a_index | eval var = coalesce(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | where floor(stringField) > 0", - "error": [ - "Argument of [floor] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = coalesce(dateField, booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = floor(numberField)", + "query": "from a_index | eval coalesce(dateField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval floor(numberField)", + "query": "from a_index | eval var = coalesce(to_datetime(dateField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = floor(to_integer(stringField))", + "query": "from a_index | eval var = coalesce(stringField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval floor(stringField)", - "error": [ - "Argument of [floor] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval coalesce(stringField, booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval floor(numberField, extraArg)", - "error": [ - "Error: [floor] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = coalesce(to_string(booleanField), to_boolean(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = floor(*)", - "error": [ - "Using wildcards (*) in floor is not allowed" - ], + "query": "from a_index | eval var = coalesce(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort floor(numberField)", + "query": "from a_index | eval coalesce(ipField)", "error": [], "warning": [] }, { - "query": "row var = greatest(\"a\")", + "query": "from a_index | eval var = coalesce(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row greatest(\"a\")", + "query": "from a_index | eval var = coalesce(ipField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = greatest(stringField)", + "query": "from a_index | eval coalesce(ipField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval greatest(stringField)", + "query": "from a_index | eval var = coalesce(to_ip(ipField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | sort greatest(stringField)", + "query": "from a_index | eval var = coalesce(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = least(\"a\")", + "query": "from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row least(\"a\")", + "query": "from a_index | eval var = coalesce(cartesianPointField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(stringField)", + "query": "from a_index | eval coalesce(cartesianPointField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval least(stringField)", + "query": "from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | sort least(stringField)", + "query": "from a_index | eval var = coalesce(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = left(\"a\", 5)", + "query": "from a_index | eval coalesce(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row left(\"a\", 5)", + "query": "from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row var = left(to_string(\"a\"), to_integer(\"a\"))", + "query": "from a_index | eval var = coalesce(cartesianShapeField, booleanField)", "error": [], "warning": [] }, { - "query": "row var = left(5, \"a\")", - "error": [ - "Argument of [left] must be [string], found value [5] type [number]", - "Argument of [left] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval coalesce(cartesianShapeField, booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(left(stringField, numberField)) > 0", + "query": "from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where length(left(numberField, stringField)) > 0", - "error": [ - "Argument of [left] must be [string], found value [numberField] type [number]", - "Argument of [left] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = coalesce(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = left(stringField, numberField)", + "query": "from a_index | eval coalesce(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval left(stringField, numberField)", + "query": "from a_index | eval var = coalesce(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = left(to_string(stringField), to_integer(stringField))", + "query": "from a_index | eval var = coalesce(geoPointField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval left(numberField, stringField)", - "error": [ - "Argument of [left] must be [string], found value [numberField] type [number]", - "Argument of [left] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval coalesce(geoPointField, booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval left(stringField, numberField, extraArg)", - "error": [ - "Error: [left] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval var = coalesce(to_geopoint(geoPointField), to_boolean(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort left(stringField, numberField)", + "query": "from a_index | eval var = coalesce(geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = length(\"a\")", + "query": "from a_index | eval coalesce(geoShapeField)", "error": [], "warning": [] }, { - "query": "row length(\"a\")", + "query": "from a_index | eval var = coalesce(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = length(to_string(\"a\"))", + "query": "from a_index | eval var = coalesce(geoShapeField, booleanField)", "error": [], "warning": [] }, { - "query": "row var = length(5)", - "error": [ - "Argument of [length] must be [string], found value [5] type [number]" - ], + "query": "from a_index | eval coalesce(geoShapeField, booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(stringField) > 0", + "query": "from a_index | eval var = coalesce(to_geoshape(geoPointField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where length(numberField) > 0", - "error": [ - "Argument of [length] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = coalesce(versionField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = length(stringField)", + "query": "from a_index | eval coalesce(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval length(stringField)", + "query": "from a_index | eval var = coalesce(to_version(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = length(to_string(stringField))", + "query": "from a_index | eval var = coalesce(versionField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval length(numberField)", - "error": [ - "Argument of [length] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval coalesce(versionField, booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval length(stringField, extraArg)", - "error": [ - "Error: [length] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = coalesce(to_version(stringField), to_boolean(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = length(*)", - "error": [ - "Using wildcards (*) in length is not allowed" - ], + "query": "from a_index | sort coalesce(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort length(stringField)", + "query": "from a_index | eval coalesce(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = log(5, 5)", + "query": "row var = concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row log(5, 5)", + "query": "row concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = log(to_integer(\"a\"), to_integer(\"a\"))", + "query": "row var = concat(to_string(\"a\"), to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = log(\"a\", \"a\")", + "query": "row var = concat(5, 5)", "error": [ - "Argument of [log] must be [number], found value [\"a\"] type [string]", - "Argument of [log] must be [number], found value [\"a\"] type [string]" + "Argument of [concat] must be [string], found value [5] type [number]", + "Argument of [concat] must be [string], found value [5] type [number]" ], "warning": [] }, { - "query": "from a_index | where log(numberField, numberField) > 0", + "query": "from a_index | where length(concat(stringField, stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where log(stringField, stringField) > 0", + "query": "from a_index | where length(concat(numberField, numberField)) > 0", "error": [ - "Argument of [log] must be [number], found value [stringField] type [string]", - "Argument of [log] must be [number], found value [stringField] type [string]" + "Argument of [concat] must be [string], found value [numberField] type [number]", + "Argument of [concat] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | eval var = log(numberField, numberField)", + "query": "from a_index | eval var = concat(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval log(numberField, numberField)", + "query": "from a_index | eval concat(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = log(to_integer(stringField), to_integer(stringField))", + "query": "from a_index | eval var = concat(to_string(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval log(stringField, stringField)", + "query": "from a_index | eval concat(numberField, numberField)", "error": [ - "Argument of [log] must be [number], found value [stringField] type [string]", - "Argument of [log] must be [number], found value [stringField] type [string]" + "Argument of [concat] must be [string], found value [numberField] type [number]", + "Argument of [concat] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | eval log(numberField, numberField, extraArg)", - "error": [ - "Error: [log] function expects no more than 2 arguments, got 3." - ], + "query": "from a_index | sort concat(stringField, stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort log(numberField, numberField)", + "query": "row var = concat(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row var = log10(5)", - "error": [], + "query": "row var = concat(true, true)", + "error": [ + "Argument of [concat] must be [string], found value [true] type [boolean]", + "Argument of [concat] must be [string], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row log10(5)", - "error": [], + "query": "from a_index | where length(concat(booleanField, booleanField)) > 0", + "error": [ + "Argument of [concat] must be [string], found value [booleanField] type [boolean]", + "Argument of [concat] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = log10(to_integer(\"a\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = log10(\"a\")", - "error": [ - "Argument of [log10] must be [number], found value [\"a\"] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | where log10(numberField) > 0", + "query": "from a_index | eval var = concat(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where log10(stringField) > 0", + "query": "from a_index | eval concat(booleanField, booleanField)", "error": [ - "Argument of [log10] must be [number], found value [stringField] type [string]" + "Argument of [concat] must be [string], found value [booleanField] type [boolean]", + "Argument of [concat] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = log10(numberField)", + "query": "row var = cos(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval log10(numberField)", + "query": "row cos(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = log10(to_integer(stringField))", + "query": "row var = cos(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval log10(stringField)", + "query": "row var = cos(\"a\")", "error": [ - "Argument of [log10] must be [number], found value [stringField] type [string]" + "Argument of [cos] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval log10(numberField, extraArg)", - "error": [ - "Error: [log10] function expects exactly one argument, got 2." - ], + "query": "from a_index | where cos(numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = log10(*)", + "query": "from a_index | where cos(stringField) > 0", "error": [ - "Using wildcards (*) in log10 is not allowed" + "Argument of [cos] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | sort log10(numberField)", - "error": [], - "warning": [] - }, - { - "query": "row var = ltrim(\"a\")", + "query": "from a_index | eval var = cos(numberField)", "error": [], "warning": [] }, { - "query": "row ltrim(\"a\")", + "query": "from a_index | eval cos(numberField)", "error": [], "warning": [] }, { - "query": "row var = ltrim(to_string(\"a\"))", + "query": "from a_index | eval var = cos(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "row var = ltrim(5)", + "query": "from a_index | eval cos(stringField)", "error": [ - "Argument of [ltrim] must be [string], found value [5] type [number]" + "Argument of [cos] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | where length(ltrim(stringField)) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where length(ltrim(numberField)) > 0", + "query": "from a_index | eval cos(numberField, extraArg)", "error": [ - "Argument of [ltrim] must be [string], found value [numberField] type [number]" + "Error: [cos] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = ltrim(stringField)", - "error": [], + "query": "from a_index | eval var = cos(*)", + "error": [ + "Using wildcards (*) in cos is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval ltrim(stringField)", + "query": "from a_index | sort cos(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ltrim(to_string(stringField))", + "query": "row var = cos(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval ltrim(numberField)", + "query": "row var = cos(true)", "error": [ - "Argument of [ltrim] must be [string], found value [numberField] type [number]" + "Argument of [cos] must be [number], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval ltrim(stringField, extraArg)", + "query": "from a_index | where cos(booleanField) > 0", "error": [ - "Error: [ltrim] function expects exactly one argument, got 2." + "Argument of [cos] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = ltrim(*)", - "error": [ - "Using wildcards (*) in ltrim is not allowed" - ], + "query": "from a_index | eval var = cos(to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort ltrim(stringField)", - "error": [], + "query": "from a_index | eval cos(booleanField)", + "error": [ + "Argument of [cos] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_avg(5)", + "query": "row var = cosh(5)", "error": [], "warning": [] }, { - "query": "row mv_avg(5)", + "query": "row cosh(5)", "error": [], "warning": [] }, { - "query": "row var = mv_avg(to_integer(\"a\"))", + "query": "row var = cosh(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = mv_avg(\"a\")", + "query": "row var = cosh(\"a\")", "error": [ - "Argument of [mv_avg] must be [number], found value [\"a\"] type [string]" + "Argument of [cosh] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | where mv_avg(numberField) > 0", + "query": "from a_index | where cosh(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where mv_avg(stringField) > 0", + "query": "from a_index | where cosh(stringField) > 0", "error": [ - "Argument of [mv_avg] must be [number], found value [stringField] type [string]" + "Argument of [cosh] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_avg(numberField)", + "query": "from a_index | eval var = cosh(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_avg(numberField)", + "query": "from a_index | eval cosh(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_avg(to_integer(stringField))", + "query": "from a_index | eval var = cosh(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_avg(stringField)", + "query": "from a_index | eval cosh(stringField)", "error": [ - "Argument of [mv_avg] must be [number], found value [stringField] type [string]" + "Argument of [cosh] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval mv_avg(numberField, extraArg)", + "query": "from a_index | eval cosh(numberField, extraArg)", "error": [ - "Error: [mv_avg] function expects exactly one argument, got 2." + "Error: [cosh] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = mv_avg(*)", + "query": "from a_index | eval var = cosh(*)", "error": [ - "Using wildcards (*) in mv_avg is not allowed" + "Using wildcards (*) in cosh is not allowed" ], "warning": [] }, { - "query": "from a_index | sort mv_avg(numberField)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_concat(\"a\", \"a\")", + "query": "from a_index | sort cosh(numberField)", "error": [], "warning": [] }, { - "query": "row mv_concat(\"a\", \"a\")", + "query": "row var = cosh(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = mv_concat(to_string(\"a\"), to_string(\"a\"))", - "error": [], + "query": "row var = cosh(true)", + "error": [ + "Argument of [cosh] must be [number], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_concat(5, 5)", + "query": "from a_index | where cosh(booleanField) > 0", "error": [ - "Argument of [mv_concat] must be [string], found value [5] type [number]", - "Argument of [mv_concat] must be [string], found value [5] type [number]" + "Argument of [cosh] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where length(mv_concat(stringField, stringField)) > 0", + "query": "from a_index | eval var = cosh(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_concat(numberField, numberField)) > 0", + "query": "from a_index | eval cosh(booleanField)", "error": [ - "Argument of [mv_concat] must be [string], found value [numberField] type [number]", - "Argument of [mv_concat] must be [string], found value [numberField] type [number]" + "Argument of [cosh] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_concat(stringField, stringField)", + "query": "row var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", now())", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_concat(stringField, stringField)", + "query": "row date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", now())", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_concat(to_string(stringField), to_string(stringField))", + "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_concat(numberField, numberField)", - "error": [ - "Argument of [mv_concat] must be [string], found value [numberField] type [number]", - "Argument of [mv_concat] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_concat(stringField, stringField, extraArg)", - "error": [ - "Error: [mv_concat] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort mv_concat(stringField, stringField)", - "error": [], + "query": "from a_index | eval date_extract(stringField, stringField)", + "error": [ + "Argument of [date_extract] must be [chrono_literal], found value [stringField] type [string]", + "Argument of [date_extract] must be [date], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "row var = mv_count(\"a\")", - "error": [], + "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField, extraArg)", + "error": [ + "Error: [date_extract] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "row mv_count(\"a\")", + "query": "from a_index | sort date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(stringField)", - "error": [], + "query": "row var = date_extract(true, true)", + "error": [ + "Argument of [date_extract] must be [chrono_literal], found value [true] type [boolean]", + "Argument of [date_extract] must be [date], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval mv_count(stringField)", + "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_count(*)", + "query": "from a_index | eval date_extract(booleanField, booleanField)", "error": [ - "Using wildcards (*) in mv_count is not allowed" + "Argument of [date_extract] must be [chrono_literal], found value [booleanField] type [boolean]", + "Argument of [date_extract] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort mv_count(stringField)", + "query": "row var = date_format(\"a\", now())", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(\"a\")", + "query": "row date_format(\"a\", now())", "error": [], "warning": [] }, { - "query": "row mv_dedupe(\"a\")", + "query": "from a_index | eval var = date_format(stringField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(stringField)", + "query": "from a_index | eval date_format(stringField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(stringField)", + "query": "from a_index | eval var = date_format(to_string(stringField), to_datetime(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(*)", + "query": "from a_index | eval date_format(stringField, numberField)", "error": [ - "Using wildcards (*) in mv_dedupe is not allowed" + "Argument of [date_format] must be [date], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | sort mv_dedupe(stringField)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_first(\"a\")", - "error": [], + "query": "from a_index | eval date_format(stringField, dateField, extraArg)", + "error": [ + "Error: [date_format] function expects no more than 2 arguments, got 3." + ], "warning": [] }, { - "query": "row mv_first(\"a\")", + "query": "from a_index | sort date_format(stringField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(stringField)", - "error": [], + "query": "row var = date_format(true, true)", + "error": [ + "Argument of [date_format] must be [string], found value [true] type [boolean]", + "Argument of [date_format] must be [date], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval mv_first(stringField)", + "query": "from a_index | eval var = date_format(to_string(booleanField), to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(*)", + "query": "from a_index | eval date_format(booleanField, booleanField)", "error": [ - "Using wildcards (*) in mv_first is not allowed" + "Argument of [date_format] must be [string], found value [booleanField] type [boolean]", + "Argument of [date_format] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort mv_first(stringField)", - "error": [], - "warning": [] - }, - { - "query": "row var = mv_last(\"a\")", + "query": "row var = date_parse(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row mv_last(\"a\")", + "query": "row var = date_parse(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(stringField)", + "query": "row date_parse(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_last(stringField)", + "query": "row var = date_parse(to_string(\"a\"), to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(*)", + "query": "row var = date_parse(5, 5)", "error": [ - "Using wildcards (*) in mv_last is not allowed" + "Argument of [date_parse] must be [string], found value [5] type [number]", + "Argument of [date_parse] must be [string], found value [5] type [number]" ], "warning": [] }, { - "query": "from a_index | sort mv_last(stringField)", + "query": "from a_index | eval var = date_parse(stringField)", "error": [], "warning": [] }, { - "query": "row var = mv_max(\"a\")", + "query": "from a_index | eval var = date_parse(stringField, stringField)", "error": [], "warning": [] }, { - "query": "row mv_max(\"a\")", + "query": "from a_index | eval date_parse(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(stringField)", + "query": "from a_index | eval var = date_parse(to_string(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(stringField)", - "error": [], + "query": "from a_index | eval date_parse(numberField, numberField)", + "error": [ + "Argument of [date_parse] must be [string], found value [numberField] type [number]", + "Argument of [date_parse] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_max(*)", + "query": "from a_index | eval date_parse(stringField, stringField, extraArg)", "error": [ - "Using wildcards (*) in mv_max is not allowed" + "Error: [date_parse] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | sort mv_max(stringField)", + "query": "from a_index | sort date_parse(stringField, stringField)", "error": [], "warning": [] }, { - "query": "row var = mv_median(5)", + "query": "row var = date_parse(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row mv_median(5)", - "error": [], + "query": "row var = date_parse(true, true)", + "error": [ + "Argument of [date_parse] must be [string], found value [true] type [boolean]", + "Argument of [date_parse] must be [string], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row var = mv_median(to_integer(\"a\"))", + "query": "from a_index | eval var = date_parse(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = mv_median(\"a\")", + "query": "from a_index | eval date_parse(booleanField, booleanField)", "error": [ - "Argument of [mv_median] must be [number], found value [\"a\"] type [string]" + "Argument of [date_parse] must be [string], found value [booleanField] type [boolean]", + "Argument of [date_parse] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where mv_median(numberField) > 0", + "query": "row var = date_trunc(1 year, now())", "error": [], "warning": [] }, { - "query": "from a_index | where mv_median(stringField) > 0", - "error": [ - "Argument of [mv_median] must be [number], found value [stringField] type [string]" - ], + "query": "row date_trunc(1 year, now())", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_median(numberField)", + "query": "from a_index | eval var = date_trunc(1 year, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(numberField)", + "query": "from a_index | eval date_trunc(1 year, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_median(to_integer(stringField))", + "query": "from a_index | eval var = date_trunc(1 year, to_datetime(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(stringField)", - "error": [ - "Argument of [mv_median] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval mv_median(numberField, extraArg)", + "query": "from a_index | eval date_trunc(stringField, stringField)", "error": [ - "Error: [mv_median] function expects exactly one argument, got 2." + "Argument of [date_trunc] must be [time_literal], found value [stringField] type [string]", + "Argument of [date_trunc] must be [date], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_median(*)", + "query": "from a_index | eval date_trunc(1 year, dateField, extraArg)", "error": [ - "Using wildcards (*) in mv_median is not allowed" + "Error: [date_trunc] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | sort mv_median(numberField)", + "query": "from a_index | sort date_trunc(1 year, dateField)", "error": [], "warning": [] }, { - "query": "row var = mv_min(\"a\")", + "query": "row var = date_trunc(now(), now())", "error": [], "warning": [] }, { - "query": "row mv_min(\"a\")", + "query": "row date_trunc(now(), now())", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(stringField)", - "error": [], + "query": "row var = date_trunc(true, true)", + "error": [ + "Argument of [date_trunc] must be [time_literal], found value [true] type [boolean]", + "Argument of [date_trunc] must be [date], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval mv_min(stringField)", + "query": "from a_index | eval var = date_trunc(1 year, to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_min(*)", + "query": "from a_index | eval date_trunc(booleanField, booleanField)", "error": [ - "Using wildcards (*) in mv_min is not allowed" + "Argument of [date_trunc] must be [time_literal], found value [booleanField] type [boolean]", + "Argument of [date_trunc] must be [date], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort mv_min(stringField)", + "query": "from a_index | eval var = date_trunc(dateField, dateField)", "error": [], "warning": [] }, { - "query": "row var = mv_slice(\"a\", 5, 5)", + "query": "from a_index | eval date_trunc(dateField, dateField)", "error": [], "warning": [] }, { - "query": "row mv_slice(\"a\", 5, 5)", + "query": "from a_index | eval var = date_trunc(to_datetime(dateField), to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(stringField, numberField, numberField)", + "query": "row var = e()", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_slice(stringField, numberField, numberField)", + "query": "row e()", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_slice(stringField, numberField, numberField)", + "query": "from a_index | where e() > 0", "error": [], "warning": [] }, { - "query": "row var = mv_sort(\"a\", \"asc\")", + "query": "from a_index | eval var = e()", "error": [], "warning": [] }, { - "query": "row mv_sort(\"a\", \"asc\")", + "query": "from a_index | eval e()", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(stringField, \"asc\")", - "error": [], + "query": "from a_index | eval e(extraArg)", + "error": [ + "Error: [e] function expects exactly 0 arguments, got 1." + ], "warning": [] }, { - "query": "from a_index | eval mv_sort(stringField, \"asc\")", + "query": "from a_index | sort e()", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_sort(stringField, \"asc\")", + "query": "row var = ends_with(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row var = mv_sum(5)", + "query": "row ends_with(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "row mv_sum(5)", + "query": "row var = ends_with(to_string(\"a\"), to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = mv_sum(to_integer(\"a\"))", + "query": "row var = ends_with(5, 5)", + "error": [ + "Argument of [ends_with] must be [string], found value [5] type [number]", + "Argument of [ends_with] must be [string], found value [5] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = ends_with(stringField, stringField)", "error": [], "warning": [] }, { - "query": "row var = mv_sum(\"a\")", - "error": [ - "Argument of [mv_sum] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval ends_with(stringField, stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_sum(numberField) > 0", + "query": "from a_index | eval var = ends_with(to_string(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | where mv_sum(stringField) > 0", + "query": "from a_index | eval ends_with(numberField, numberField)", "error": [ - "Argument of [mv_sum] must be [number], found value [stringField] type [string]" + "Argument of [ends_with] must be [string], found value [numberField] type [number]", + "Argument of [ends_with] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(numberField)", - "error": [], + "query": "from a_index | eval ends_with(stringField, stringField, extraArg)", + "error": [ + "Error: [ends_with] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | eval mv_sum(numberField)", + "query": "from a_index | sort ends_with(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(to_integer(stringField))", + "query": "row var = ends_with(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sum(stringField)", + "query": "row var = ends_with(true, true)", "error": [ - "Argument of [mv_sum] must be [number], found value [stringField] type [string]" + "Argument of [ends_with] must be [string], found value [true] type [boolean]", + "Argument of [ends_with] must be [string], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval mv_sum(numberField, extraArg)", - "error": [ - "Error: [mv_sum] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = ends_with(to_string(booleanField), to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(*)", + "query": "from a_index | eval ends_with(booleanField, booleanField)", "error": [ - "Using wildcards (*) in mv_sum is not allowed" + "Argument of [ends_with] must be [string], found value [booleanField] type [boolean]", + "Argument of [ends_with] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort mv_sum(numberField)", + "query": "row var = floor(5)", "error": [], "warning": [] }, { - "query": "row var = mv_zip(\"a\", \"a\", \"a\")", + "query": "row floor(5)", "error": [], "warning": [] }, { - "query": "row mv_zip(\"a\", \"a\", \"a\")", + "query": "row var = floor(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = mv_zip(to_string(\"a\"), to_string(\"a\"), to_string(\"a\"))", + "query": "row var = floor(\"a\")", + "error": [ + "Argument of [floor] must be [number], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | where floor(numberField) > 0", "error": [], "warning": [] }, { - "query": "row var = mv_zip(5, 5, 5)", + "query": "from a_index | where floor(stringField) > 0", "error": [ - "Argument of [mv_zip] must be [string], found value [5] type [number]", - "Argument of [mv_zip] must be [string], found value [5] type [number]", - "Argument of [mv_zip] must be [string], found value [5] type [number]" + "Argument of [floor] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | where length(mv_zip(stringField, stringField, stringField)) > 0", + "query": "from a_index | eval var = floor(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_zip(numberField, numberField, numberField)) > 0", + "query": "from a_index | eval floor(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = floor(to_integer(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval floor(stringField)", "error": [ - "Argument of [mv_zip] must be [string], found value [numberField] type [number]", - "Argument of [mv_zip] must be [string], found value [numberField] type [number]", - "Argument of [mv_zip] must be [string], found value [numberField] type [number]" + "Argument of [floor] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(stringField, stringField, stringField)", - "error": [], + "query": "from a_index | eval floor(numberField, extraArg)", + "error": [ + "Error: [floor] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | eval mv_zip(stringField, stringField, stringField)", + "query": "from a_index | eval var = floor(*)", + "error": [ + "Using wildcards (*) in floor is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort floor(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(to_string(stringField), to_string(stringField), to_string(stringField))", + "query": "row var = floor(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_zip(numberField, numberField, numberField)", + "query": "row var = floor(true)", "error": [ - "Argument of [mv_zip] must be [string], found value [numberField] type [number]", - "Argument of [mv_zip] must be [string], found value [numberField] type [number]", - "Argument of [mv_zip] must be [string], found value [numberField] type [number]" + "Argument of [floor] must be [number], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval mv_zip(stringField, stringField, stringField, extraArg)", + "query": "from a_index | where floor(booleanField) > 0", "error": [ - "Error: [mv_zip] function expects exactly 3 arguments, got 4." + "Argument of [floor] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | sort mv_zip(stringField, stringField, stringField)", + "query": "from a_index | eval var = floor(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = now()", - "error": [], + "query": "from a_index | eval floor(booleanField)", + "error": [ + "Argument of [floor] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row now()", + "query": "row var = greatest(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = now()", + "query": "row greatest(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval now()", + "query": "from a_index | eval var = greatest(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval now(extraArg)", - "error": [ - "Error: [now] function expects exactly 0 arguments, got 1." - ], + "query": "from a_index | eval greatest(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort now()", + "query": "from a_index | sort greatest(stringField)", "error": [], "warning": [] }, { - "query": "row var = pi()", + "query": "row var = greatest(true)", "error": [], "warning": [] }, { - "query": "row pi()", + "query": "row greatest(true)", "error": [], "warning": [] }, { - "query": "from a_index | where pi() > 0", + "query": "row var = greatest(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = pi()", + "query": "row var = greatest(true, true)", "error": [], "warning": [] }, { - "query": "from a_index | eval pi()", + "query": "row greatest(true, true)", "error": [], "warning": [] }, { - "query": "from a_index | eval pi(extraArg)", - "error": [ - "Error: [pi] function expects exactly 0 arguments, got 1." - ], + "query": "row var = greatest(to_boolean(true), to_boolean(true))", + "error": [], "warning": [] }, { - "query": "from a_index | sort pi()", + "query": "row var = greatest(5, 5)", "error": [], "warning": [] }, { - "query": "row var = pow(5, 5)", + "query": "row greatest(5, 5)", "error": [], "warning": [] }, { - "query": "row pow(5, 5)", + "query": "row var = greatest(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = pow(to_integer(\"a\"), to_integer(\"a\"))", + "query": "row var = greatest(5)", "error": [], "warning": [] }, { - "query": "row var = pow(\"a\", \"a\")", - "error": [ - "Argument of [pow] must be [number], found value [\"a\"] type [string]", - "Argument of [pow] must be [number], found value [\"a\"] type [string]" - ], + "query": "row greatest(5)", + "error": [], "warning": [] }, { - "query": "from a_index | where pow(numberField, numberField) > 0", + "query": "row var = greatest(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | where pow(stringField, stringField) > 0", - "error": [ - "Argument of [pow] must be [number], found value [stringField] type [string]", - "Argument of [pow] must be [number], found value [stringField] type [string]" - ], + "query": "row var = greatest(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = pow(numberField, numberField)", + "query": "row greatest(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval pow(numberField, numberField)", + "query": "row var = greatest(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = pow(to_integer(stringField), to_integer(stringField))", + "query": "row var = greatest(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval pow(stringField, stringField)", - "error": [ - "Argument of [pow] must be [number], found value [stringField] type [string]", - "Argument of [pow] must be [number], found value [stringField] type [string]" - ], + "query": "row var = greatest(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval pow(numberField, numberField, extraArg)", - "error": [ - "Error: [pow] function expects exactly 2 arguments, got 3." - ], + "query": "row greatest(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort pow(numberField, numberField)", + "query": "row var = greatest(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row var = replace(\"a\", \"a\", \"a\")", + "query": "row var = greatest(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row replace(\"a\", \"a\", \"a\")", + "query": "row greatest(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = replace(to_string(\"a\"), to_string(\"a\"), to_string(\"a\"))", + "query": "row var = greatest(to_version(\"a\"), to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = replace(5, 5, 5)", + "query": "row var = greatest(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", "error": [ - "Argument of [replace] must be [string], found value [5] type [number]", - "Argument of [replace] must be [string], found value [5] type [number]", - "Argument of [replace] must be [string], found value [5] type [number]" + "Argument of [greatest] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", + "Argument of [greatest] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | where length(replace(stringField, stringField, stringField)) > 0", + "query": "from a_index | where greatest(numberField, numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where length(replace(numberField, numberField, numberField)) > 0", + "query": "from a_index | where greatest(cartesianPointField, cartesianPointField) > 0", "error": [ - "Argument of [replace] must be [string], found value [numberField] type [number]", - "Argument of [replace] must be [string], found value [numberField] type [number]", - "Argument of [replace] must be [string], found value [numberField] type [number]" + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | eval var = replace(stringField, stringField, stringField)", + "query": "from a_index | where greatest(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval replace(stringField, stringField, stringField)", - "error": [], + "query": "from a_index | where greatest(cartesianPointField) > 0", + "error": [ + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval var = replace(to_string(stringField), to_string(stringField), to_string(stringField))", + "query": "from a_index | where length(greatest(stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval replace(numberField, numberField, numberField)", + "query": "from a_index | where length(greatest(cartesianPointField)) > 0", "error": [ - "Argument of [replace] must be [string], found value [numberField] type [number]", - "Argument of [replace] must be [string], found value [numberField] type [number]", - "Argument of [replace] must be [string], found value [numberField] type [number]" + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | eval replace(stringField, stringField, stringField, extraArg)", - "error": [ - "Error: [replace] function expects exactly 3 arguments, got 4." - ], + "query": "from a_index | where length(greatest(stringField, stringField)) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort replace(stringField, stringField, stringField)", - "error": [], + "query": "from a_index | where length(greatest(cartesianPointField, cartesianPointField)) > 0", + "error": [ + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "row var = right(\"a\", 5)", + "query": "from a_index | eval var = greatest(booleanField)", "error": [], "warning": [] }, { - "query": "row right(\"a\", 5)", + "query": "from a_index | eval greatest(booleanField)", "error": [], "warning": [] }, { - "query": "row var = right(to_string(\"a\"), to_integer(\"a\"))", + "query": "from a_index | eval var = greatest(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = right(5, \"a\")", + "query": "from a_index | eval greatest(cartesianPointField)", "error": [ - "Argument of [right] must be [string], found value [5] type [number]", - "Argument of [right] must be [number], found value [\"a\"] type [string]" + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | where length(right(stringField, numberField)) > 0", + "query": "from a_index | eval var = greatest(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(right(numberField, stringField)) > 0", - "error": [ - "Argument of [right] must be [string], found value [numberField] type [number]", - "Argument of [right] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = right(stringField, numberField)", + "query": "from a_index | eval greatest(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval right(stringField, numberField)", + "query": "from a_index | eval var = greatest(to_boolean(booleanField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = right(to_string(stringField), to_integer(stringField))", - "error": [], + "query": "from a_index | eval greatest(cartesianPointField, cartesianPointField)", + "error": [ + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval right(numberField, stringField)", - "error": [ - "Argument of [right] must be [string], found value [numberField] type [number]", - "Argument of [right] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = greatest(numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval right(stringField, numberField, extraArg)", - "error": [ - "Error: [right] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval greatest(numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort right(stringField, numberField)", + "query": "from a_index | eval var = greatest(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = round(5, 5)", + "query": "from a_index | eval var = greatest(numberField)", "error": [], "warning": [] }, { - "query": "row round(5, 5)", + "query": "from a_index | eval greatest(numberField)", "error": [], "warning": [] }, { - "query": "row var = round(to_integer(\"a\"), to_integer(\"a\"))", + "query": "from a_index | eval var = greatest(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = round(\"a\", \"a\")", - "error": [ - "Argument of [round] must be [number], found value [\"a\"] type [string]", - "Argument of [round] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval var = greatest(ipField, ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | where round(numberField, numberField) > 0", + "query": "from a_index | eval greatest(ipField, ipField)", "error": [], "warning": [] }, { - "query": "from a_index | where round(stringField, stringField) > 0", - "error": [ - "Argument of [round] must be [number], found value [stringField] type [string]", - "Argument of [round] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = greatest(to_ip(ipField), to_ip(ipField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = round(numberField, numberField)", + "query": "from a_index | eval var = greatest(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval round(numberField, numberField)", + "query": "from a_index | eval var = greatest(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = round(to_integer(stringField), to_integer(stringField))", + "query": "from a_index | eval greatest(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval round(stringField, stringField)", - "error": [ - "Argument of [round] must be [number], found value [stringField] type [string]", - "Argument of [round] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = greatest(to_string(booleanField), to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval round(numberField, numberField, extraArg)", - "error": [ - "Error: [round] function expects no more than 2 arguments, got 3." - ], + "query": "from a_index | eval var = greatest(versionField, versionField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort round(numberField, numberField)", + "query": "from a_index | eval greatest(versionField, versionField)", "error": [], "warning": [] }, { - "query": "row var = rtrim(\"a\")", + "query": "from a_index | eval var = greatest(to_version(stringField), to_version(stringField))", "error": [], "warning": [] }, { - "query": "row rtrim(\"a\")", + "query": "from a_index | sort greatest(booleanField)", "error": [], "warning": [] }, { - "query": "row var = rtrim(to_string(\"a\"))", + "query": "row var = least(\"a\")", "error": [], "warning": [] }, { - "query": "row var = rtrim(5)", - "error": [ - "Argument of [rtrim] must be [string], found value [5] type [number]" - ], + "query": "row least(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | where length(rtrim(stringField)) > 0", + "query": "from a_index | eval var = least(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(rtrim(numberField)) > 0", - "error": [ - "Argument of [rtrim] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval least(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = rtrim(stringField)", + "query": "from a_index | sort least(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(stringField)", + "query": "row var = least(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = rtrim(to_string(stringField))", + "query": "row least(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(numberField)", - "error": [ - "Argument of [rtrim] must be [string], found value [numberField] type [number]" - ], + "query": "row var = least(to_boolean(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(stringField, extraArg)", - "error": [ - "Error: [rtrim] function expects exactly one argument, got 2." - ], + "query": "row var = least(true, true)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = rtrim(*)", - "error": [ - "Using wildcards (*) in rtrim is not allowed" - ], + "query": "row least(true, true)", + "error": [], "warning": [] }, { - "query": "from a_index | sort rtrim(stringField)", + "query": "row var = least(to_boolean(true), to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = signum(5)", + "query": "row var = least(5, 5)", "error": [], "warning": [] }, { - "query": "row signum(5)", + "query": "row least(5, 5)", "error": [], "warning": [] }, { - "query": "row var = signum(to_integer(\"a\"))", + "query": "row var = least(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = signum(\"a\")", - "error": [ - "Argument of [signum] must be [number], found value [\"a\"] type [string]" - ], + "query": "row var = least(5)", + "error": [], "warning": [] }, { - "query": "from a_index | where signum(numberField) > 0", + "query": "row least(5)", "error": [], "warning": [] }, { - "query": "from a_index | where signum(stringField) > 0", - "error": [ - "Argument of [signum] must be [number], found value [stringField] type [string]" - ], + "query": "row var = least(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = signum(numberField)", + "query": "row var = least(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval signum(numberField)", + "query": "row least(to_ip(\"127.0.0.1\"), to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = signum(to_integer(stringField))", + "query": "row var = least(to_ip(to_ip(\"127.0.0.1\")), to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval signum(stringField)", - "error": [ - "Argument of [signum] must be [number], found value [stringField] type [string]" - ], + "query": "row var = least(to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval signum(numberField, extraArg)", - "error": [ - "Error: [signum] function expects exactly one argument, got 2." - ], + "query": "row var = least(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = signum(*)", - "error": [ - "Using wildcards (*) in signum is not allowed" - ], + "query": "row least(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort signum(numberField)", + "query": "row var = least(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row var = sin(5)", + "query": "row var = least(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row sin(5)", + "query": "row least(to_version(\"1.0.0\"), to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = sin(to_integer(\"a\"))", + "query": "row var = least(to_version(\"a\"), to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = sin(\"a\")", + "query": "row var = least(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", "error": [ - "Argument of [sin] must be [number], found value [\"a\"] type [string]" + "Argument of [least] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", + "Argument of [least] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | where sin(numberField) > 0", + "query": "from a_index | where least(numberField, numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where sin(stringField) > 0", + "query": "from a_index | where least(cartesianPointField, cartesianPointField) > 0", "error": [ - "Argument of [sin] must be [number], found value [stringField] type [string]" + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | eval var = sin(numberField)", + "query": "from a_index | where least(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval sin(numberField)", - "error": [], + "query": "from a_index | where least(cartesianPointField) > 0", + "error": [ + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval var = sin(to_integer(stringField))", + "query": "from a_index | where length(least(stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval sin(stringField)", + "query": "from a_index | where length(least(cartesianPointField)) > 0", "error": [ - "Argument of [sin] must be [number], found value [stringField] type [string]" + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | eval sin(numberField, extraArg)", - "error": [ - "Error: [sin] function expects exactly one argument, got 2." - ], + "query": "from a_index | where length(least(stringField, stringField)) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sin(*)", + "query": "from a_index | where length(least(cartesianPointField, cartesianPointField)) > 0", "error": [ - "Using wildcards (*) in sin is not allowed" + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | sort sin(numberField)", - "error": [], - "warning": [] - }, - { - "query": "row var = sinh(5)", + "query": "from a_index | eval var = least(booleanField)", "error": [], "warning": [] }, { - "query": "row sinh(5)", + "query": "from a_index | eval least(booleanField)", "error": [], "warning": [] }, { - "query": "row var = sinh(to_integer(\"a\"))", + "query": "from a_index | eval var = least(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = sinh(\"a\")", + "query": "from a_index | eval least(cartesianPointField)", "error": [ - "Argument of [sinh] must be [number], found value [\"a\"] type [string]" + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | where sinh(numberField) > 0", + "query": "from a_index | eval var = least(booleanField, booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | where sinh(stringField) > 0", - "error": [ - "Argument of [sinh] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval least(booleanField, booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sinh(numberField)", + "query": "from a_index | eval var = least(to_boolean(booleanField), to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval sinh(numberField)", - "error": [], + "query": "from a_index | eval least(cartesianPointField, cartesianPointField)", + "error": [ + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | eval var = sinh(to_integer(stringField))", + "query": "from a_index | eval var = least(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval sinh(stringField)", - "error": [ - "Argument of [sinh] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval least(numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval sinh(numberField, extraArg)", - "error": [ - "Error: [sinh] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = least(to_integer(booleanField), to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sinh(*)", - "error": [ - "Using wildcards (*) in sinh is not allowed" - ], + "query": "from a_index | eval var = least(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort sinh(numberField)", + "query": "from a_index | eval least(numberField)", "error": [], "warning": [] }, { - "query": "row var = split(\"a\", \"a\")", + "query": "from a_index | eval var = least(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row split(\"a\", \"a\")", + "query": "from a_index | eval var = least(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row var = split(to_string(\"a\"), to_string(\"a\"))", + "query": "from a_index | eval least(ipField, ipField)", "error": [], "warning": [] }, { - "query": "row var = split(5, 5)", - "error": [ - "Argument of [split] must be [string], found value [5] type [number]", - "Argument of [split] must be [string], found value [5] type [number]" - ], + "query": "from a_index | eval var = least(to_ip(ipField), to_ip(ipField))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(split(stringField, stringField)) > 0", + "query": "from a_index | eval var = least(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | where length(split(numberField, numberField)) > 0", - "error": [ - "Argument of [split] must be [string], found value [numberField] type [number]", - "Argument of [split] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = least(stringField, stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = split(stringField, stringField)", + "query": "from a_index | eval least(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval split(stringField, stringField)", + "query": "from a_index | eval var = least(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = split(to_string(stringField), to_string(stringField))", + "query": "from a_index | eval var = least(versionField, versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval split(numberField, numberField)", - "error": [ - "Argument of [split] must be [string], found value [numberField] type [number]", - "Argument of [split] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval least(versionField, versionField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval split(stringField, stringField, extraArg)", - "error": [ - "Error: [split] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval var = least(to_version(stringField), to_version(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort split(stringField, stringField)", + "query": "from a_index | sort least(booleanField)", "error": [], "warning": [] }, { - "query": "row var = sqrt(5)", + "query": "row var = left(\"a\", 5)", "error": [], "warning": [] }, { - "query": "row sqrt(5)", + "query": "row left(\"a\", 5)", "error": [], "warning": [] }, { - "query": "row var = sqrt(to_integer(\"a\"))", + "query": "row var = left(to_string(\"a\"), to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = sqrt(\"a\")", + "query": "row var = left(5, \"a\")", "error": [ - "Argument of [sqrt] must be [number], found value [\"a\"] type [string]" + "Argument of [left] must be [string], found value [5] type [number]", + "Argument of [left] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | where sqrt(numberField) > 0", + "query": "from a_index | where length(left(stringField, numberField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where sqrt(stringField) > 0", + "query": "from a_index | where length(left(numberField, stringField)) > 0", "error": [ - "Argument of [sqrt] must be [number], found value [stringField] type [string]" + "Argument of [left] must be [string], found value [numberField] type [number]", + "Argument of [left] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = sqrt(numberField)", + "query": "from a_index | eval var = left(stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(numberField)", + "query": "from a_index | eval left(stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = sqrt(to_integer(stringField))", + "query": "from a_index | eval var = left(to_string(stringField), to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(stringField)", + "query": "from a_index | eval left(numberField, stringField)", "error": [ - "Argument of [sqrt] must be [number], found value [stringField] type [string]" + "Argument of [left] must be [string], found value [numberField] type [number]", + "Argument of [left] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval sqrt(numberField, extraArg)", + "query": "from a_index | eval left(stringField, numberField, extraArg)", "error": [ - "Error: [sqrt] function expects exactly one argument, got 2." + "Error: [left] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = sqrt(*)", - "error": [ - "Using wildcards (*) in sqrt is not allowed" - ], + "query": "from a_index | sort left(stringField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort sqrt(numberField)", + "query": "row var = left(to_string(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = left(true, true)", + "error": [ + "Argument of [left] must be [string], found value [true] type [boolean]", + "Argument of [left] must be [number], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | where length(left(booleanField, booleanField)) > 0", + "error": [ + "Argument of [left] must be [string], found value [booleanField] type [boolean]", + "Argument of [left] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = left(to_string(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_contains(\"a\", \"a\")", + "query": "from a_index | eval left(booleanField, booleanField)", "error": [ - "Argument of [st_contains] must be [geo_point], found value [\"a\"] type [string]", - "Argument of [st_contains] must be [geo_point], found value [\"a\"] type [string]" + "Argument of [left] must be [string], found value [booleanField] type [boolean]", + "Argument of [left] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = length(\"a\")", "error": [], "warning": [] }, { - "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row length(\"a\")", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = length(to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = length(5)", + "error": [ + "Argument of [length] must be [string], found value [5] type [number]" + ], "warning": [] }, { - "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | where length(stringField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", - "error": [], + "query": "from a_index | where length(numberField) > 0", + "error": [ + "Argument of [length] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = length(stringField)", "error": [], "warning": [] }, { - "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval length(stringField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = length(to_string(stringField))", "error": [], "warning": [] }, { - "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval length(numberField)", + "error": [ + "Argument of [length] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", - "error": [], + "query": "from a_index | eval length(stringField, extraArg)", + "error": [ + "Error: [length] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval var = length(*)", + "error": [ + "Using wildcards (*) in length is not allowed" + ], "warning": [] }, { - "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | sort length(stringField)", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = length(to_string(true))", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = length(true)", + "error": [ + "Argument of [length] must be [string], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | where length(booleanField) > 0", + "error": [ + "Argument of [length] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = length(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval length(booleanField)", + "error": [ + "Argument of [length] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = log(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoPointField, geoPointField)", + "query": "row log(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoPointField)", + "query": "row var = log(to_integer(\"a\"), to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geopoint(stringField), to_geopoint(stringField))", - "error": [], + "query": "row var = log(\"a\", \"a\")", + "error": [ + "Argument of [log] must be [number], found value [\"a\"] type [string]", + "Argument of [log] must be [number], found value [\"a\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | eval st_contains(stringField, stringField)", - "error": [ - "Argument of [st_contains] must be [geo_point], found value [stringField] type [string]", - "Argument of [st_contains] must be [geo_point], found value [stringField] type [string]" - ], + "query": "from a_index | where log(numberField, numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoPointField, extraArg)", + "query": "from a_index | where log(stringField, stringField) > 0", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Argument of [log] must be [number], found value [stringField] type [string]", + "Argument of [log] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoPointField, geoShapeField)", + "query": "from a_index | eval var = log(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoShapeField)", + "query": "from a_index | eval log(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geopoint(stringField), geoShapeField)", + "query": "from a_index | eval var = log(to_integer(stringField), to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoShapeField, extraArg)", + "query": "from a_index | eval log(stringField, stringField)", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Argument of [log] must be [number], found value [stringField] type [string]", + "Argument of [log] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, geoPointField)", - "error": [], + "query": "from a_index | eval log(numberField, numberField, extraArg)", + "error": [ + "Error: [log] function expects no more than 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoPointField)", + "query": "from a_index | sort log(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, to_geopoint(stringField))", + "query": "row var = log(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoPointField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], + "query": "row log(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, geoShapeField)", + "query": "row var = log(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoShapeField)", + "query": "row var = log(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoShapeField, extraArg)", + "query": "row var = log(true, true)", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Argument of [log] must be [number], found value [true] type [boolean]", + "Argument of [log] must be [number], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField)", + "query": "from a_index | where log(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", - "error": [], + "query": "from a_index | where log(booleanField) > 0", + "error": [ + "Argument of [log] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)", + "query": "from a_index | where log(booleanField, booleanField) > 0", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Argument of [log] must be [number], found value [booleanField] type [boolean]", + "Argument of [log] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)", + "query": "from a_index | eval var = log(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField)", + "query": "from a_index | eval log(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "from a_index | eval var = log(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField, extraArg)", + "query": "from a_index | eval log(booleanField)", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Argument of [log] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField)", - "error": [], + "query": "from a_index | eval var = log(*)", + "error": [ + "Using wildcards (*) in log is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "from a_index | eval var = log(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField, extraArg)", + "query": "from a_index | eval log(booleanField, booleanField)", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Argument of [log] must be [number], found value [booleanField] type [boolean]", + "Argument of [log] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | sort log(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)", + "query": "row var = log10(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | sort st_contains(geoPointField, geoPointField)", + "query": "row log10(5)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "row var = log10(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = log10(\"a\")", + "error": [ + "Argument of [log10] must be [number], found value [\"a\"] type [string]" + ], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "query": "from a_index | where log10(numberField) > 0", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(\"a\", \"a\")", + "query": "from a_index | where log10(stringField) > 0", "error": [ - "Argument of [st_disjoint] must be [geo_point], found value [\"a\"] type [string]", - "Argument of [st_disjoint] must be [geo_point], found value [\"a\"] type [string]" + "Argument of [log10] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = log10(numberField)", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval log10(numberField)", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = log10(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval log10(stringField)", + "error": [ + "Argument of [log10] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval log10(numberField, extraArg)", + "error": [ + "Error: [log10] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", - "error": [], + "query": "from a_index | eval var = log10(*)", + "error": [ + "Using wildcards (*) in log10 is not allowed" + ], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | sort log10(numberField)", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = log10(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = log10(true)", + "error": [ + "Argument of [log10] must be [number], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | where log10(booleanField) > 0", + "error": [ + "Argument of [log10] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = log10(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval log10(booleanField)", + "error": [ + "Argument of [log10] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = ltrim(\"a\")", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row ltrim(\"a\")", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = ltrim(to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = ltrim(5)", + "error": [ + "Argument of [ltrim] must be [string], found value [5] type [number]" + ], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | where length(ltrim(stringField)) > 0", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | where length(ltrim(numberField)) > 0", + "error": [ + "Argument of [ltrim] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = ltrim(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoPointField, geoPointField)", + "query": "from a_index | eval ltrim(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoPointField)", + "query": "from a_index | eval var = ltrim(to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geopoint(stringField), to_geopoint(stringField))", - "error": [], + "query": "from a_index | eval ltrim(numberField)", + "error": [ + "Argument of [ltrim] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(stringField, stringField)", + "query": "from a_index | eval ltrim(stringField, extraArg)", "error": [ - "Argument of [st_disjoint] must be [geo_point], found value [stringField] type [string]", - "Argument of [st_disjoint] must be [geo_point], found value [stringField] type [string]" + "Error: [ltrim] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoPointField, extraArg)", + "query": "from a_index | eval var = ltrim(*)", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Using wildcards (*) in ltrim is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoPointField, geoShapeField)", + "query": "from a_index | sort ltrim(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField)", + "query": "row var = ltrim(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geopoint(stringField), geoShapeField)", - "error": [], + "query": "row var = ltrim(true)", + "error": [ + "Argument of [ltrim] must be [string], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField, extraArg)", + "query": "from a_index | where length(ltrim(booleanField)) > 0", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Argument of [ltrim] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, geoPointField)", + "query": "from a_index | eval var = ltrim(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField)", - "error": [], + "query": "from a_index | eval ltrim(booleanField)", + "error": [ + "Argument of [ltrim] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, to_geopoint(stringField))", + "query": "row var = mv_avg(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row mv_avg(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)", + "query": "row var = mv_avg(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField)", + "query": "row var = mv_avg(\"a\")", + "error": [ + "Argument of [mv_avg] must be [number], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | where mv_avg(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField, extraArg)", + "query": "from a_index | where mv_avg(stringField) > 0", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Argument of [mv_avg] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = mv_avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval mv_avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "from a_index | eval var = mv_avg(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)", + "query": "from a_index | eval mv_avg(stringField)", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Argument of [mv_avg] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)", - "error": [], + "query": "from a_index | eval mv_avg(numberField, extraArg)", + "error": [ + "Error: [mv_avg] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)", + "query": "from a_index | eval var = mv_avg(*)", + "error": [ + "Using wildcards (*) in mv_avg is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort mv_avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "row var = mv_avg(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField, extraArg)", + "query": "row var = mv_avg(true)", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Argument of [mv_avg] must be [number], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianPointField)", - "error": [], + "query": "from a_index | where mv_avg(booleanField) > 0", + "error": [ + "Argument of [mv_avg] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)", + "query": "from a_index | eval var = mv_avg(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, to_cartesianpoint(stringField))", - "error": [], + "query": "from a_index | eval mv_avg(booleanField)", + "error": [ + "Argument of [mv_avg] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_concat(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)", + "query": "row mv_concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)", + "query": "row var = mv_concat(to_string(\"a\"), to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField, extraArg)", + "query": "row var = mv_concat(5, 5)", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Argument of [mv_concat] must be [string], found value [5] type [number]", + "Argument of [mv_concat] must be [string], found value [5] type [number]" ], "warning": [] }, { - "query": "from a_index | sort st_disjoint(geoPointField, geoPointField)", + "query": "from a_index | where length(mv_concat(stringField, stringField)) > 0", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | where length(mv_concat(numberField, numberField)) > 0", + "error": [ + "Argument of [mv_concat] must be [string], found value [numberField] type [number]", + "Argument of [mv_concat] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = mv_concat(stringField, stringField)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_concat(stringField, stringField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_concat(to_string(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(\"a\", \"a\")", + "query": "from a_index | eval mv_concat(numberField, numberField)", "error": [ - "Argument of [st_intersects] must be [geo_point], found value [\"a\"] type [string]", - "Argument of [st_intersects] must be [geo_point], found value [\"a\"] type [string]" + "Argument of [mv_concat] must be [string], found value [numberField] type [number]", + "Argument of [mv_concat] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval mv_concat(stringField, stringField, extraArg)", + "error": [ + "Error: [mv_concat] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "row st_intersects(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | sort mv_concat(stringField, stringField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = mv_concat(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = mv_concat(true, true)", + "error": [ + "Argument of [mv_concat] must be [string], found value [true] type [boolean]", + "Argument of [mv_concat] must be [string], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | where length(mv_concat(booleanField, booleanField)) > 0", + "error": [ + "Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]", + "Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_concat(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "from a_index | eval mv_concat(booleanField, booleanField)", + "error": [ + "Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]", + "Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = mv_count(\"a\")", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row mv_count(\"a\")", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(stringField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval mv_count(stringField)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(*)", + "error": [ + "Using wildcards (*) in mv_count is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort mv_count(stringField)", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = mv_count(true)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row mv_count(true)", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = mv_count(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = mv_count(to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "row mv_count(to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = mv_count(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = mv_count(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoPointField, geoPointField)", + "query": "row mv_count(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoPointField)", + "query": "row var = mv_count(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geopoint(stringField), to_geopoint(stringField))", + "query": "row var = mv_count(now())", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(stringField, stringField)", - "error": [ - "Argument of [st_intersects] must be [geo_point], found value [stringField] type [string]", - "Argument of [st_intersects] must be [geo_point], found value [stringField] type [string]" - ], + "query": "row mv_count(now())", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoPointField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_count(to_datetime(now()))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoPointField, geoShapeField)", + "query": "row var = mv_count(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoShapeField)", + "query": "row mv_count(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geopoint(stringField), geoShapeField)", + "query": "row var = mv_count(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoShapeField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_count(to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoShapeField, geoPointField)", + "query": "row mv_count(to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoShapeField, geoPointField)", + "query": "row var = mv_count(to_geopoint(to_geopoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoShapeField, to_geopoint(stringField))", + "query": "row var = mv_count(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoShapeField, geoPointField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "row mv_count(to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoShapeField, geoShapeField)", + "query": "row var = mv_count(to_geoshape(to_geopoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField)", + "query": "row var = mv_count(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "row mv_count(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)", + "query": "row var = mv_count(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField)", + "query": "row var = mv_count(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "row var = mv_count(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "row mv_count(to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)", + "query": "row var = mv_count(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)", + "query": "from a_index | where mv_count(booleanField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "from a_index | where mv_count(cartesianPointField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | where mv_count(cartesianShapeField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianPointField)", + "query": "from a_index | where mv_count(dateField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)", + "query": "from a_index | where mv_count(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "from a_index | where mv_count(geoPointField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | where mv_count(geoShapeField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | where mv_count(ipField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | where mv_count(stringField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | where mv_count(versionField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_intersects(geoPointField, geoPointField)", + "query": "from a_index | eval var = mv_count(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_count(booleanField)", "error": [], "warning": [] }, { - "query": "row st_within(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_count(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = st_within(\"a\", \"a\")", - "error": [ - "Argument of [st_within] must be [geo_point], found value [\"a\"] type [string]", - "Argument of [st_within] must be [geo_point], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval mv_count(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row st_within(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_count(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(dateField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "query": "from a_index | eval mv_count(dateField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(numberField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_count(numberField)", "error": [], "warning": [] }, { - "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_count(geoPointField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_count(geoPointField)", "error": [], "warning": [] }, { - "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_count(geoShapeField)", "error": [], "warning": [] }, { - "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_count(ipField)", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_count(ipField)", "error": [], "warning": [] }, { - "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_count(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoPointField, geoPointField)", + "query": "from a_index | eval var = mv_count(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoPointField)", + "query": "from a_index | eval var = mv_count(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geopoint(stringField), to_geopoint(stringField))", + "query": "from a_index | eval mv_count(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(stringField, stringField)", - "error": [ - "Argument of [st_within] must be [geo_point], found value [stringField] type [string]", - "Argument of [st_within] must be [geo_point], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_count(to_version(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoPointField, extraArg)", + "query": "from a_index | eval mv_count(booleanField, extraArg)", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Error: [mv_count] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoPointField, geoShapeField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval st_within(geoPointField, geoShapeField)", + "query": "from a_index | sort mv_count(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geopoint(stringField), geoShapeField)", + "query": "row var = mv_dedupe(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoShapeField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], - "warning": [] - }, - { - "query": "from a_index | eval var = st_within(geoShapeField, geoPointField)", + "query": "row mv_dedupe(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoPointField)", + "query": "from a_index | eval var = mv_dedupe(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoShapeField, to_geopoint(stringField))", + "query": "from a_index | eval mv_dedupe(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoPointField, extraArg)", + "query": "from a_index | eval var = mv_dedupe(*)", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Using wildcards (*) in mv_dedupe is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoShapeField, geoShapeField)", + "query": "from a_index | sort mv_dedupe(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoShapeField)", + "query": "row var = mv_dedupe(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoShapeField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], + "query": "row mv_dedupe(true)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianPointField, cartesianPointField)", + "query": "row var = mv_dedupe(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField)", + "query": "row var = mv_dedupe(now())", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "row mv_dedupe(now())", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_dedupe(to_datetime(now()))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)", + "query": "row var = mv_dedupe(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField)", + "query": "row mv_dedupe(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "row var = mv_dedupe(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_dedupe(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)", + "query": "row mv_dedupe(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField)", + "query": "row var = mv_dedupe(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "row var = mv_dedupe(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], + "query": "row var = mv_dedupe(to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)", + "query": "row mv_dedupe(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField)", + "query": "row var = mv_dedupe(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | where mv_dedupe(numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_within(geoPointField, geoPointField)", + "query": "from a_index | where length(mv_dedupe(stringField)) > 0", "error": [], "warning": [] }, { - "query": "row var = st_x(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_dedupe(booleanField)", "error": [], "warning": [] }, { - "query": "row st_x(to_geopoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_dedupe(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_x(to_geopoint(\"a\"))", + "query": "from a_index | eval var = mv_dedupe(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = st_x(\"a\")", - "error": [ - "Argument of [st_x] must be [geo_point], found value [\"a\"] type [string]" - ], + "query": "from a_index | eval var = mv_dedupe(dateField)", + "error": [], "warning": [] }, { - "query": "row var = st_x(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval mv_dedupe(dateField)", "error": [], "warning": [] }, { - "query": "row st_x(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "from a_index | eval var = mv_dedupe(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row var = st_x(to_cartesianpoint(\"a\"))", + "query": "from a_index | eval var = mv_dedupe(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(geoPointField)", + "query": "from a_index | eval mv_dedupe(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(geoPointField)", + "query": "from a_index | eval var = mv_dedupe(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(to_geopoint(stringField))", + "query": "from a_index | eval var = mv_dedupe(ipField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(stringField)", - "error": [ - "Argument of [st_x] must be [geo_point], found value [stringField] type [string]" - ], + "query": "from a_index | eval mv_dedupe(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(geoPointField, extraArg)", - "error": [ - "Error: [st_x] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = mv_dedupe(to_ip(ipField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(*)", - "error": [ - "Using wildcards (*) in st_x is not allowed" - ], + "query": "from a_index | eval var = mv_dedupe(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(cartesianPointField)", + "query": "from a_index | eval var = mv_dedupe(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(cartesianPointField)", + "query": "from a_index | eval mv_dedupe(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(to_cartesianpoint(stringField))", + "query": "from a_index | eval var = mv_dedupe(to_version(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(cartesianPointField, extraArg)", + "query": "from a_index | eval mv_dedupe(booleanField, extraArg)", "error": [ - "Error: [st_x] function expects exactly one argument, got 2." + "Error: [mv_dedupe] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | sort st_x(geoPointField)", + "query": "from a_index | sort mv_dedupe(booleanField)", "error": [], "warning": [] }, { - "query": "row var = st_y(to_geopoint(\"POINT (30 10)\"))", + "query": "row mv_dedupe(to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row st_y(to_geopoint(\"POINT (30 10)\"))", + "query": "row var = mv_dedupe(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "row var = st_y(to_geopoint(\"a\"))", + "query": "row var = mv_dedupe(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = st_y(\"a\")", - "error": [ - "Argument of [st_y] must be [geo_point], found value [\"a\"] type [string]" - ], + "query": "row mv_dedupe(to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "row var = st_y(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = mv_dedupe(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "row st_y(to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = mv_dedupe(to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = st_y(to_cartesianpoint(\"a\"))", + "query": "row mv_dedupe(to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(geoPointField)", + "query": "row var = mv_dedupe(to_geopoint(to_geopoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(geoPointField)", + "query": "row var = mv_dedupe(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(to_geopoint(stringField))", + "query": "row mv_dedupe(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(stringField)", - "error": [ - "Argument of [st_y] must be [geo_point], found value [stringField] type [string]" - ], + "query": "row var = mv_dedupe(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(geoPointField, extraArg)", - "error": [ - "Error: [st_y] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = mv_dedupe(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(*)", - "error": [ - "Using wildcards (*) in st_y is not allowed" - ], + "query": "from a_index | eval var = mv_dedupe(to_cartesianpoint(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(cartesianPointField)", + "query": "from a_index | eval var = mv_dedupe(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(cartesianPointField)", + "query": "from a_index | eval mv_dedupe(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(to_cartesianpoint(stringField))", + "query": "from a_index | eval var = mv_dedupe(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(cartesianPointField, extraArg)", - "error": [ - "Error: [st_y] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = mv_dedupe(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort st_y(geoPointField)", + "query": "from a_index | eval mv_dedupe(geoPointField)", "error": [], "warning": [] }, { - "query": "row var = starts_with(\"a\", \"a\")", + "query": "from a_index | eval var = mv_dedupe(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row starts_with(\"a\", \"a\")", + "query": "from a_index | eval var = mv_dedupe(geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = starts_with(to_string(\"a\"), to_string(\"a\"))", + "query": "from a_index | eval mv_dedupe(geoShapeField)", "error": [], "warning": [] }, { - "query": "row var = starts_with(5, 5)", + "query": "from a_index | eval var = mv_dedupe(to_geoshape(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval mv_dedupe(numberField, extraArg)", "error": [ - "Argument of [starts_with] must be [string], found value [5] type [number]", - "Argument of [starts_with] must be [string], found value [5] type [number]" + "Error: [mv_dedupe] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = starts_with(stringField, stringField)", + "query": "from a_index | sort mv_dedupe(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(stringField, stringField)", + "query": "row var = mv_first(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = starts_with(to_string(stringField), to_string(stringField))", + "query": "row mv_first(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(numberField, numberField)", - "error": [ - "Argument of [starts_with] must be [string], found value [numberField] type [number]", - "Argument of [starts_with] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = mv_first(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(stringField, stringField, extraArg)", + "query": "from a_index | eval mv_first(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = mv_first(*)", "error": [ - "Error: [starts_with] function expects exactly 2 arguments, got 3." + "Using wildcards (*) in mv_first is not allowed" ], "warning": [] }, { - "query": "from a_index | sort starts_with(stringField, stringField)", + "query": "from a_index | sort mv_first(stringField)", "error": [], "warning": [] }, { - "query": "row var = substring(\"a\", 5, 5)", + "query": "row var = mv_first(true)", "error": [], "warning": [] }, { - "query": "row substring(\"a\", 5, 5)", + "query": "row mv_first(true)", "error": [], "warning": [] }, { - "query": "row var = substring(to_string(\"a\"), to_integer(\"a\"), to_integer(\"a\"))", + "query": "row var = mv_first(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = substring(5, \"a\", \"a\")", - "error": [ - "Argument of [substring] must be [string], found value [5] type [number]", - "Argument of [substring] must be [number], found value [\"a\"] type [string]", - "Argument of [substring] must be [number], found value [\"a\"] type [string]" - ], + "query": "row var = mv_first(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | where length(substring(stringField, numberField, numberField)) > 0", + "query": "row mv_first(to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | where length(substring(numberField, stringField, stringField)) > 0", - "error": [ - "Argument of [substring] must be [string], found value [numberField] type [number]", - "Argument of [substring] must be [number], found value [stringField] type [string]", - "Argument of [substring] must be [number], found value [stringField] type [string]" - ], + "query": "row var = mv_first(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = substring(stringField, numberField, numberField)", + "query": "row var = mv_first(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval substring(stringField, numberField, numberField)", + "query": "row mv_first(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = substring(to_string(stringField), to_integer(stringField), to_integer(stringField))", + "query": "row var = mv_first(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval substring(numberField, stringField, stringField)", - "error": [ - "Argument of [substring] must be [string], found value [numberField] type [number]", - "Argument of [substring] must be [number], found value [stringField] type [string]", - "Argument of [substring] must be [number], found value [stringField] type [string]" - ], + "query": "row var = mv_first(now())", + "error": [], "warning": [] }, { - "query": "from a_index | eval substring(stringField, numberField, numberField, extraArg)", - "error": [ - "Error: [substring] function expects exactly 3 arguments, got 4." - ], + "query": "row mv_first(now())", + "error": [], "warning": [] }, { - "query": "from a_index | sort substring(stringField, numberField, numberField)", + "query": "row var = mv_first(to_datetime(now()))", "error": [], "warning": [] }, { - "query": "row var = tan(5)", + "query": "row var = mv_first(5)", "error": [], "warning": [] }, { - "query": "row tan(5)", + "query": "row mv_first(5)", "error": [], "warning": [] }, { - "query": "row var = tan(to_integer(\"a\"))", + "query": "row var = mv_first(to_integer(true))", "error": [], "warning": [] }, { - "query": "row var = tan(\"a\")", - "error": [ - "Argument of [tan] must be [number], found value [\"a\"] type [string]" - ], + "query": "row var = mv_first(to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | where tan(numberField) > 0", + "query": "row mv_first(to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | where tan(stringField) > 0", - "error": [ - "Argument of [tan] must be [number], found value [stringField] type [string]" - ], + "query": "row var = mv_first(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = tan(numberField)", + "query": "row var = mv_first(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval tan(numberField)", + "query": "row mv_first(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = tan(to_integer(stringField))", + "query": "row var = mv_first(to_geoshape(to_geopoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval tan(stringField)", - "error": [ - "Argument of [tan] must be [number], found value [stringField] type [string]" - ], + "query": "row var = mv_first(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval tan(numberField, extraArg)", - "error": [ - "Error: [tan] function expects exactly one argument, got 2." - ], + "query": "row mv_first(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = tan(*)", - "error": [ - "Using wildcards (*) in tan is not allowed" - ], + "query": "row var = mv_first(to_ip(to_ip(\"127.0.0.1\")))", + "error": [], "warning": [] }, { - "query": "from a_index | sort tan(numberField)", + "query": "row var = mv_first(to_string(true))", "error": [], "warning": [] }, { - "query": "row var = tanh(5)", + "query": "row var = mv_first(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row tanh(5)", + "query": "row mv_first(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "row var = tanh(to_integer(\"a\"))", + "query": "row var = mv_first(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = tanh(\"a\")", - "error": [ - "Argument of [tanh] must be [number], found value [\"a\"] type [string]" - ], + "query": "from a_index | where mv_first(numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | where tanh(numberField) > 0", + "query": "from a_index | where length(mv_first(stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where tanh(stringField) > 0", - "error": [ - "Argument of [tanh] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_first(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = tanh(numberField)", + "query": "from a_index | eval mv_first(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(numberField)", + "query": "from a_index | eval var = mv_first(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = tanh(to_integer(stringField))", + "query": "from a_index | eval var = mv_first(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(stringField)", - "error": [ - "Argument of [tanh] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval mv_first(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(numberField, extraArg)", - "error": [ - "Error: [tanh] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval var = mv_first(to_cartesianpoint(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = tanh(*)", - "error": [ - "Using wildcards (*) in tanh is not allowed" - ], + "query": "from a_index | eval var = mv_first(cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort tanh(numberField)", + "query": "from a_index | eval mv_first(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "row var = tau()", + "query": "from a_index | eval var = mv_first(to_cartesianshape(cartesianPointField))", "error": [], "warning": [] }, { - "query": "row tau()", + "query": "from a_index | eval var = mv_first(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | where tau() > 0", + "query": "from a_index | eval mv_first(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = tau()", + "query": "from a_index | eval var = mv_first(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval tau()", + "query": "from a_index | eval var = mv_first(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tau(extraArg)", - "error": [ - "Error: [tau] function expects exactly 0 arguments, got 1." - ], + "query": "from a_index | eval mv_first(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort tau()", + "query": "from a_index | eval var = mv_first(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_boolean(\"a\")", + "query": "from a_index | eval var = mv_first(geoPointField)", "error": [], "warning": [] }, { - "query": "row to_boolean(\"a\")", + "query": "from a_index | eval mv_first(geoPointField)", "error": [], "warning": [] }, { - "query": "row var = to_bool(\"a\")", + "query": "from a_index | eval var = mv_first(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(stringField)", + "query": "from a_index | eval var = mv_first(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(stringField)", + "query": "from a_index | eval mv_first(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_bool(stringField)", + "query": "from a_index | eval var = mv_first(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(*)", - "error": [ - "Using wildcards (*) in to_boolean is not allowed" - ], + "query": "from a_index | eval var = mv_first(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_boolean(stringField)", + "query": "from a_index | eval mv_first(ipField)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianpoint(\"a\")", + "query": "from a_index | eval var = mv_first(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row to_cartesianpoint(\"a\")", + "query": "from a_index | eval var = mv_first(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianpoint(stringField)", + "query": "from a_index | eval var = mv_first(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianpoint(stringField)", + "query": "from a_index | eval mv_first(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianpoint(*)", + "query": "from a_index | eval var = mv_first(to_version(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval mv_first(booleanField, extraArg)", "error": [ - "Using wildcards (*) in to_cartesianpoint is not allowed" + "Error: [mv_first] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | sort to_cartesianpoint(stringField)", + "query": "from a_index | sort mv_first(booleanField)", "error": [], "warning": [] }, { - "query": "row var = to_cartesianshape(\"a\")", + "query": "row var = mv_last(\"a\")", "error": [], "warning": [] }, { - "query": "row to_cartesianshape(\"a\")", + "query": "row mv_last(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(stringField)", + "query": "from a_index | eval var = mv_last(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianshape(stringField)", + "query": "from a_index | eval mv_last(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(*)", + "query": "from a_index | eval var = mv_last(*)", "error": [ - "Using wildcards (*) in to_cartesianshape is not allowed" + "Using wildcards (*) in mv_last is not allowed" ], "warning": [] }, { - "query": "from a_index | sort to_cartesianshape(stringField)", + "query": "from a_index | sort mv_last(stringField)", "error": [], "warning": [] }, { - "query": "row var = to_datetime(\"a\")", + "query": "row var = mv_last(true)", "error": [], "warning": [] }, { - "query": "row to_datetime(\"a\")", + "query": "row mv_last(true)", "error": [], "warning": [] }, { - "query": "row var = to_dt(\"a\")", + "query": "row var = mv_last(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(stringField)", + "query": "row var = mv_last(to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(stringField)", + "query": "row mv_last(to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dt(stringField)", + "query": "row var = mv_last(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(*)", - "error": [ - "Using wildcards (*) in to_datetime is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | sort to_datetime(stringField)", + "query": "row var = mv_last(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = to_degrees(5)", + "query": "row mv_last(to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row to_degrees(5)", + "query": "row var = mv_last(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "row var = to_degrees(to_integer(\"a\"))", + "query": "row var = mv_last(now())", "error": [], "warning": [] }, { - "query": "row var = to_degrees(\"a\")", - "error": [ - "Argument of [to_degrees] must be [number], found value [\"a\"] type [string]" - ], + "query": "row mv_last(now())", + "error": [], "warning": [] }, { - "query": "from a_index | where to_degrees(numberField) > 0", + "query": "row var = mv_last(to_datetime(now()))", "error": [], "warning": [] }, { - "query": "from a_index | where to_degrees(stringField) > 0", - "error": [ - "Argument of [to_degrees] must be [number], found value [stringField] type [string]" - ], + "query": "row var = mv_last(5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_degrees(numberField)", + "query": "row mv_last(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(numberField)", + "query": "row var = mv_last(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_degrees(to_integer(stringField))", + "query": "row var = mv_last(to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(stringField)", - "error": [ - "Argument of [to_degrees] must be [number], found value [stringField] type [string]" - ], + "query": "row mv_last(to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(numberField, extraArg)", - "error": [ - "Error: [to_degrees] function expects exactly one argument, got 2." - ], + "query": "row var = mv_last(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_degrees(*)", - "error": [ - "Using wildcards (*) in to_degrees is not allowed" - ], + "query": "row var = mv_last(to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_degrees(numberField)", + "query": "row mv_last(to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "row var = to_double(\"a\")", + "query": "row var = mv_last(to_geoshape(to_geopoint(\"POINT (30 10)\")))", "error": [], "warning": [] }, { - "query": "row to_double(\"a\")", + "query": "row var = mv_last(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row var = to_dbl(\"a\")", + "query": "row mv_last(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(stringField)", + "query": "row var = mv_last(to_ip(to_ip(\"127.0.0.1\")))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(stringField)", + "query": "row var = mv_last(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dbl(stringField)", + "query": "row var = mv_last(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(*)", - "error": [ - "Using wildcards (*) in to_double is not allowed" - ], + "query": "row mv_last(to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_double(stringField)", + "query": "row var = mv_last(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = to_geopoint(\"a\")", + "query": "from a_index | where mv_last(numberField) > 0", "error": [], "warning": [] }, { - "query": "row to_geopoint(\"a\")", + "query": "from a_index | where length(mv_last(stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(stringField)", + "query": "from a_index | eval var = mv_last(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geopoint(stringField)", + "query": "from a_index | eval mv_last(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(*)", - "error": [ - "Using wildcards (*) in to_geopoint is not allowed" - ], + "query": "from a_index | eval var = mv_last(to_boolean(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_geopoint(stringField)", + "query": "from a_index | eval var = mv_last(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row var = to_geoshape(\"a\")", + "query": "from a_index | eval mv_last(cartesianPointField)", "error": [], "warning": [] }, { - "query": "row to_geoshape(\"a\")", + "query": "from a_index | eval var = mv_last(to_cartesianpoint(cartesianPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(stringField)", + "query": "from a_index | eval var = mv_last(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geoshape(stringField)", + "query": "from a_index | eval mv_last(cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(*)", - "error": [ - "Using wildcards (*) in to_geoshape is not allowed" - ], + "query": "from a_index | eval var = mv_last(to_cartesianshape(cartesianPointField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_geoshape(stringField)", + "query": "from a_index | eval var = mv_last(dateField)", "error": [], "warning": [] }, { - "query": "row var = to_integer(\"a\")", + "query": "from a_index | eval mv_last(dateField)", "error": [], "warning": [] }, { - "query": "row to_integer(\"a\")", + "query": "from a_index | eval var = mv_last(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "row var = to_int(\"a\")", + "query": "from a_index | eval var = mv_last(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(stringField)", + "query": "from a_index | eval mv_last(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(stringField)", + "query": "from a_index | eval var = mv_last(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_int(stringField)", + "query": "from a_index | eval var = mv_last(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(*)", - "error": [ - "Using wildcards (*) in to_integer is not allowed" - ], + "query": "from a_index | eval mv_last(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_integer(stringField)", + "query": "from a_index | eval var = mv_last(to_geopoint(geoPointField))", "error": [], "warning": [] }, { - "query": "row var = to_ip(\"a\")", + "query": "from a_index | eval var = mv_last(geoShapeField)", "error": [], "warning": [] }, { - "query": "row to_ip(\"a\")", + "query": "from a_index | eval mv_last(geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ip(stringField)", + "query": "from a_index | eval var = mv_last(to_geoshape(geoPointField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_ip(stringField)", + "query": "from a_index | eval var = mv_last(ipField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ip(*)", - "error": [ - "Using wildcards (*) in to_ip is not allowed" - ], + "query": "from a_index | eval mv_last(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_ip(stringField)", + "query": "from a_index | eval var = mv_last(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "row var = to_long(\"a\")", + "query": "from a_index | eval var = mv_last(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "row to_long(\"a\")", + "query": "from a_index | eval var = mv_last(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(stringField)", + "query": "from a_index | eval mv_last(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(stringField)", + "query": "from a_index | eval var = mv_last(to_version(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(*)", + "query": "from a_index | eval mv_last(booleanField, extraArg)", "error": [ - "Using wildcards (*) in to_long is not allowed" + "Error: [mv_last] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | sort to_long(stringField)", + "query": "from a_index | sort mv_last(booleanField)", "error": [], "warning": [] }, { - "query": "row var = to_lower(\"a\")", + "query": "row var = mv_max(\"a\")", "error": [], "warning": [] }, { - "query": "row to_lower(\"a\")", + "query": "row mv_max(\"a\")", "error": [], "warning": [] }, { - "query": "row var = to_lower(to_string(\"a\"))", + "query": "from a_index | eval var = mv_max(stringField)", "error": [], "warning": [] }, { - "query": "row var = to_lower(5)", + "query": "from a_index | eval mv_max(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = mv_max(*)", "error": [ - "Argument of [to_lower] must be [string], found value [5] type [number]" + "Using wildcards (*) in mv_max is not allowed" ], "warning": [] }, { - "query": "from a_index | where length(to_lower(stringField)) > 0", + "query": "from a_index | sort mv_max(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_lower(numberField)) > 0", - "error": [ - "Argument of [to_lower] must be [string], found value [numberField] type [number]" - ], + "query": "row var = mv_max(true)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_lower(stringField)", + "query": "row mv_max(true)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(stringField)", + "query": "row var = mv_max(to_boolean(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_lower(to_string(stringField))", + "query": "row var = mv_max(now())", "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(numberField)", - "error": [ - "Argument of [to_lower] must be [string], found value [numberField] type [number]" - ], + "query": "row mv_max(now())", + "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(stringField, extraArg)", - "error": [ - "Error: [to_lower] function expects exactly one argument, got 2." - ], + "query": "row var = mv_max(to_datetime(now()))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_lower(*)", - "error": [ - "Using wildcards (*) in to_lower is not allowed" - ], + "query": "row var = mv_max(5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort to_lower(stringField)", + "query": "row mv_max(5)", "error": [], "warning": [] }, { - "query": "row var = to_radians(5)", + "query": "row var = mv_max(to_integer(true))", "error": [], "warning": [] }, { - "query": "row to_radians(5)", + "query": "row var = mv_max(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row var = to_radians(to_integer(\"a\"))", + "query": "row mv_max(to_ip(\"127.0.0.1\"))", "error": [], "warning": [] }, { - "query": "row var = to_radians(\"a\")", - "error": [ - "Argument of [to_radians] must be [number], found value [\"a\"] type [string]" - ], + "query": "row var = mv_max(to_ip(to_ip(\"127.0.0.1\")))", + "error": [], "warning": [] }, { - "query": "from a_index | where to_radians(numberField) > 0", + "query": "row var = mv_max(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | where to_radians(stringField) > 0", - "error": [ - "Argument of [to_radians] must be [number], found value [stringField] type [string]" - ], + "query": "row var = mv_max(to_version(\"1.0.0\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_radians(numberField)", + "query": "row mv_max(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_radians(numberField)", + "query": "row var = mv_max(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_radians(to_integer(stringField))", + "query": "row var = mv_max(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [mv_max] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where mv_max(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_radians(stringField)", + "query": "from a_index | where mv_max(cartesianPointField) > 0", "error": [ - "Argument of [to_radians] must be [number], found value [stringField] type [string]" + "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | eval to_radians(numberField, extraArg)", - "error": [ - "Error: [to_radians] function expects exactly one argument, got 2." - ], + "query": "from a_index | where length(mv_max(stringField)) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_radians(*)", + "query": "from a_index | where length(mv_max(cartesianPointField)) > 0", "error": [ - "Using wildcards (*) in to_radians is not allowed" + "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" ], "warning": [] }, { - "query": "from a_index | sort to_radians(numberField)", + "query": "from a_index | eval var = mv_max(booleanField)", "error": [], "warning": [] }, { - "query": "row var = to_string(\"a\")", + "query": "from a_index | eval mv_max(booleanField)", "error": [], "warning": [] }, { - "query": "row to_string(\"a\")", + "query": "from a_index | eval var = mv_max(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_str(\"a\")", + "query": "from a_index | eval mv_max(cartesianPointField)", + "error": [ + "Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = mv_max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(stringField)", + "query": "from a_index | eval mv_max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_string(stringField)", + "query": "from a_index | eval var = mv_max(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(stringField)", + "query": "from a_index | eval var = mv_max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(*)", - "error": [ - "Using wildcards (*) in to_string is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | sort to_string(stringField)", + "query": "from a_index | eval mv_max(numberField)", "error": [], "warning": [] }, { - "query": "row var = to_unsigned_long(\"a\")", + "query": "from a_index | eval var = mv_max(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row to_unsigned_long(\"a\")", + "query": "from a_index | eval var = mv_max(ipField)", "error": [], "warning": [] }, { - "query": "row var = to_ul(\"a\")", + "query": "from a_index | eval mv_max(ipField)", "error": [], "warning": [] }, { - "query": "row var = to_ulong(\"a\")", + "query": "from a_index | eval var = mv_max(to_ip(ipField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(stringField)", + "query": "from a_index | eval var = mv_max(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(stringField)", + "query": "from a_index | eval var = mv_max(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ul(stringField)", + "query": "from a_index | eval mv_max(versionField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ulong(stringField)", + "query": "from a_index | eval var = mv_max(to_version(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(*)", + "query": "from a_index | eval mv_max(booleanField, extraArg)", "error": [ - "Using wildcards (*) in to_unsigned_long is not allowed" + "Error: [mv_max] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | sort to_unsigned_long(stringField)", + "query": "from a_index | sort mv_max(booleanField)", "error": [], "warning": [] }, { - "query": "row var = to_upper(\"a\")", + "query": "row var = mv_median(5)", "error": [], "warning": [] }, { - "query": "row to_upper(\"a\")", + "query": "row mv_median(5)", "error": [], "warning": [] }, { - "query": "row var = to_upper(to_string(\"a\"))", + "query": "row var = mv_median(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "row var = to_upper(5)", + "query": "row var = mv_median(\"a\")", "error": [ - "Argument of [to_upper] must be [string], found value [5] type [number]" + "Argument of [mv_median] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | where length(to_upper(stringField)) > 0", + "query": "from a_index | where mv_median(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_upper(numberField)) > 0", + "query": "from a_index | where mv_median(stringField) > 0", "error": [ - "Argument of [to_upper] must be [string], found value [numberField] type [number]" + "Argument of [mv_median] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = to_upper(stringField)", + "query": "from a_index | eval var = mv_median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_upper(stringField)", + "query": "from a_index | eval mv_median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_upper(to_string(stringField))", + "query": "from a_index | eval var = mv_median(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval to_upper(numberField)", + "query": "from a_index | eval mv_median(stringField)", "error": [ - "Argument of [to_upper] must be [string], found value [numberField] type [number]" + "Argument of [mv_median] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval to_upper(stringField, extraArg)", + "query": "from a_index | eval mv_median(numberField, extraArg)", "error": [ - "Error: [to_upper] function expects exactly one argument, got 2." + "Error: [mv_median] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = to_upper(*)", + "query": "from a_index | eval var = mv_median(*)", "error": [ - "Using wildcards (*) in to_upper is not allowed" + "Using wildcards (*) in mv_median is not allowed" ], "warning": [] }, { - "query": "from a_index | sort to_upper(stringField)", + "query": "from a_index | sort mv_median(numberField)", "error": [], "warning": [] }, { - "query": "row var = to_version(\"a\")", + "query": "row var = mv_median(to_integer(true))", "error": [], "warning": [] }, { - "query": "row to_version(\"a\")", + "query": "row var = mv_median(true)", + "error": [ + "Argument of [mv_median] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where mv_median(booleanField) > 0", + "error": [ + "Argument of [mv_median] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = mv_median(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "row var = to_ver(\"a\")", + "query": "from a_index | eval mv_median(booleanField)", + "error": [ + "Argument of [mv_median] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = mv_min(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_version(stringField)", + "query": "row mv_min(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval to_version(stringField)", + "query": "from a_index | eval var = mv_min(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ver(stringField)", + "query": "from a_index | eval mv_min(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_version(*)", + "query": "from a_index | eval var = mv_min(*)", "error": [ - "Using wildcards (*) in to_version is not allowed" + "Using wildcards (*) in mv_min is not allowed" ], "warning": [] }, { - "query": "from a_index | sort to_version(stringField)", + "query": "from a_index | sort mv_min(stringField)", "error": [], "warning": [] }, { - "query": "row var = trim(\"a\")", + "query": "row var = mv_min(true)", "error": [], "warning": [] }, { - "query": "row trim(\"a\")", + "query": "row mv_min(true)", "error": [], "warning": [] }, { - "query": "row var = trim(to_string(\"a\"))", + "query": "row var = mv_min(to_boolean(true))", "error": [], "warning": [] }, { - "query": "row var = trim(5)", - "error": [ - "Argument of [trim] must be [string], found value [5] type [number]" - ], + "query": "row var = mv_min(now())", + "error": [], "warning": [] }, { - "query": "from a_index | where length(trim(stringField)) > 0", + "query": "row mv_min(now())", "error": [], "warning": [] }, { - "query": "from a_index | where length(trim(numberField)) > 0", - "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" - ], + "query": "row var = mv_min(to_datetime(now()))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = trim(stringField)", + "query": "row var = mv_min(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval trim(stringField)", + "query": "row mv_min(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = trim(to_string(stringField))", + "query": "row var = mv_min(to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | eval trim(numberField)", - "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" - ], + "query": "row var = mv_min(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval trim(stringField, extraArg)", - "error": [ - "Error: [trim] function expects exactly one argument, got 2." - ], + "query": "row mv_min(to_ip(\"127.0.0.1\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = trim(*)", - "error": [ - "Using wildcards (*) in trim is not allowed" - ], + "query": "row var = mv_min(to_ip(to_ip(\"127.0.0.1\")))", + "error": [], "warning": [] }, { - "query": "from a_index | sort trim(stringField)", + "query": "row var = mv_min(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = avg(numberField)", + "query": "row var = mv_min(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField)", + "query": "row mv_min(to_version(\"1.0.0\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(avg(numberField))", + "query": "row var = mv_min(to_version(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(avg(numberField))", - "error": [], + "query": "row var = mv_min(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [mv_min] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | stats var = round(avg(numberField)) + avg(numberField)", + "query": "from a_index | where mv_min(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats round(avg(numberField)) + avg(numberField)", - "error": [], + "query": "from a_index | where mv_min(cartesianPointField) > 0", + "error": [ + "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField / 2)", + "query": "from a_index | where length(mv_min(stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField / 2)", - "error": [], + "query": "from a_index | where length(mv_min(cartesianPointField)) > 0", + "error": [ + "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField / 2)", + "query": "from a_index | eval var = mv_min(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField / 2)", + "query": "from a_index | eval mv_min(booleanField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField)", + "query": "from a_index | eval var = mv_min(to_boolean(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField)", - "error": [], + "query": "from a_index | eval mv_min(cartesianPointField)", + "error": [ + "Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField)", + "query": "from a_index | eval var = mv_min(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) by round(numberField / 2)", + "query": "from a_index | eval mv_min(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | eval var = mv_min(to_datetime(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), ipField", + "query": "from a_index | eval var = mv_min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | eval mv_min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = mv_min(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = mv_min(ipField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = avg(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval mv_min(ipField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats avg(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval var = mv_min(to_ip(ipField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats avg(stringField)", - "error": [ - "Argument of [avg] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_min(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = avg(*)", - "error": [ - "Using wildcards (*) in avg is not allowed" - ], + "query": "from a_index | eval var = mv_min(versionField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort avg(numberField)", - "error": [ - "SORT does not support function avg" - ], + "query": "from a_index | eval mv_min(versionField)", + "error": [], "warning": [] }, { - "query": "from a_index | where avg(numberField)", - "error": [ - "WHERE does not support function avg" - ], + "query": "from a_index | eval var = mv_min(to_version(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | where avg(numberField) > 0", + "query": "from a_index | eval mv_min(booleanField, extraArg)", "error": [ - "WHERE does not support function avg" + "Error: [mv_min] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = avg(numberField)", - "error": [ - "EVAL does not support function avg" - ], + "query": "from a_index | sort mv_min(booleanField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = avg(numberField) > 0", - "error": [ - "EVAL does not support function avg" - ], + "query": "row var = mv_slice(\"a\", 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval avg(numberField)", - "error": [ - "EVAL does not support function avg" - ], + "query": "row mv_slice(\"a\", 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | eval avg(numberField) > 0", - "error": [ - "EVAL does not support function avg" - ], + "query": "from a_index | eval var = mv_slice(stringField, numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(numberField)", + "query": "from a_index | eval mv_slice(stringField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(numberField)", + "query": "from a_index | sort mv_slice(stringField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(sum(numberField))", + "query": "row var = mv_slice(true, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(sum(numberField))", + "query": "row mv_slice(true, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(sum(numberField)) + sum(numberField)", + "query": "row var = mv_slice(to_boolean(true), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(sum(numberField)) + sum(numberField)", + "query": "row var = mv_slice(to_cartesianpoint(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(numberField / 2)", + "query": "row mv_slice(to_cartesianpoint(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField / 2)", + "query": "row var = mv_slice(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField / 2)", + "query": "row var = mv_slice(to_cartesianshape(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField / 2)", + "query": "row mv_slice(to_cartesianshape(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField)", + "query": "row var = mv_slice(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField)", + "query": "row var = mv_slice(now(), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField)", + "query": "row mv_slice(now(), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(numberField) by round(numberField / 2)", + "query": "row var = mv_slice(to_datetime(now()), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField) by var1 = round(numberField / 2)", + "query": "row var = mv_slice(5, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), ipField", + "query": "row mv_slice(5, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), ipField", + "query": "row var = mv_slice(to_integer(true), to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), numberField / 2", + "query": "row var = mv_slice(to_geopoint(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "row mv_slice(to_geopoint(\"POINT (30 10)\"), 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "row var = mv_slice(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | stats sum(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "row var = mv_slice(to_geoshape(\"POINT (30 10)\"), 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | stats sum(stringField)", - "error": [ - "Argument of [sum] must be [number], found value [stringField] type [string]" - ], + "query": "row mv_slice(to_geoshape(\"POINT (30 10)\"), 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(*)", - "error": [ - "Using wildcards (*) in sum is not allowed" - ], + "query": "row var = mv_slice(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_integer(true), to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | sort sum(numberField)", - "error": [ - "SORT does not support function sum" - ], + "query": "row var = mv_slice(to_ip(\"127.0.0.1\"), 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | where sum(numberField)", - "error": [ - "WHERE does not support function sum" - ], + "query": "row mv_slice(to_ip(\"127.0.0.1\"), 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | where sum(numberField) > 0", - "error": [ - "WHERE does not support function sum" - ], + "query": "row var = mv_slice(to_ip(to_ip(\"127.0.0.1\")), to_integer(true), to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sum(numberField)", - "error": [ - "EVAL does not support function sum" - ], + "query": "row var = mv_slice(to_string(true), to_integer(true), to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sum(numberField) > 0", + "query": "row var = mv_slice(to_version(\"1.0.0\"), 5, 5)", + "error": [], + "warning": [] + }, + { + "query": "row mv_slice(to_version(\"1.0.0\"), 5, 5)", + "error": [], + "warning": [] + }, + { + "query": "row var = mv_slice(to_version(\"a\"), to_integer(true), to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = mv_slice(to_version(\"1.0.0\"), true, true)", "error": [ - "EVAL does not support function sum" + "Argument of [mv_slice] must be [number], found value [true] type [boolean]", + "Argument of [mv_slice] must be [number], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval sum(numberField)", + "query": "from a_index | where mv_slice(numberField, numberField, numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where mv_slice(numberField, booleanField, booleanField) > 0", "error": [ - "EVAL does not support function sum" + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval sum(numberField) > 0", + "query": "from a_index | where length(mv_slice(stringField, numberField, numberField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(mv_slice(stringField, booleanField, booleanField)) > 0", "error": [ - "EVAL does not support function sum" + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats var = median(numberField)", + "query": "from a_index | eval var = mv_slice(booleanField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField)", + "query": "from a_index | eval mv_slice(booleanField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median(numberField))", + "query": "from a_index | eval var = mv_slice(to_boolean(booleanField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median(numberField))", - "error": [], + "query": "from a_index | eval mv_slice(booleanField, booleanField, booleanField)", + "error": [ + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats var = round(median(numberField)) + median(numberField)", + "query": "from a_index | eval var = mv_slice(cartesianPointField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median(numberField)) + median(numberField)", + "query": "from a_index | eval mv_slice(cartesianPointField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField / 2)", + "query": "from a_index | eval var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField / 2)", - "error": [], + "query": "from a_index | eval mv_slice(cartesianPointField, booleanField, booleanField)", + "error": [ + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField / 2)", + "query": "from a_index | eval var = mv_slice(cartesianShapeField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField / 2)", + "query": "from a_index | eval mv_slice(cartesianShapeField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField)", + "query": "from a_index | eval var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField)", - "error": [], + "query": "from a_index | eval mv_slice(cartesianShapeField, booleanField, booleanField)", + "error": [ + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField)", + "query": "from a_index | eval var = mv_slice(dateField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField) by round(numberField / 2)", + "query": "from a_index | eval mv_slice(dateField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | eval var = mv_slice(to_datetime(dateField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), ipField", - "error": [], + "query": "from a_index | eval mv_slice(dateField, booleanField, booleanField)", + "error": [ + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | eval var = mv_slice(numberField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval mv_slice(numberField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = mv_slice(to_integer(booleanField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = median(avg(numberField))", + "query": "from a_index | eval mv_slice(numberField, booleanField, booleanField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats median(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval var = mv_slice(geoPointField, numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats median(stringField)", - "error": [ - "Argument of [median] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval mv_slice(geoPointField, numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = median(*)", - "error": [ - "Using wildcards (*) in median is not allowed" - ], + "query": "from a_index | eval var = mv_slice(to_geopoint(geoPointField), to_integer(booleanField), to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | sort median(numberField)", + "query": "from a_index | eval mv_slice(geoPointField, booleanField, booleanField)", "error": [ - "SORT does not support function median" + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where median(numberField)", - "error": [ - "WHERE does not support function median" - ], + "query": "from a_index | eval var = mv_slice(geoShapeField, numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | where median(numberField) > 0", - "error": [ - "WHERE does not support function median" - ], + "query": "from a_index | eval mv_slice(geoShapeField, numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = median(numberField)", - "error": [ - "EVAL does not support function median" - ], + "query": "from a_index | eval var = mv_slice(to_geoshape(geoPointField), to_integer(booleanField), to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = median(numberField) > 0", + "query": "from a_index | eval mv_slice(geoShapeField, booleanField, booleanField)", "error": [ - "EVAL does not support function median" + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval median(numberField)", - "error": [ - "EVAL does not support function median" - ], + "query": "from a_index | eval var = mv_slice(ipField, numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval median(numberField) > 0", - "error": [ - "EVAL does not support function median" - ], + "query": "from a_index | eval mv_slice(ipField, numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(numberField)", + "query": "from a_index | eval var = mv_slice(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField)", - "error": [], + "query": "from a_index | eval mv_slice(ipField, booleanField, booleanField)", + "error": [ + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats var = round(median_absolute_deviation(numberField))", + "query": "from a_index | eval var = mv_slice(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median_absolute_deviation(numberField))", - "error": [], + "query": "from a_index | eval mv_slice(stringField, booleanField, booleanField)", + "error": [ + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats var = round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", + "query": "from a_index | eval var = mv_slice(versionField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", + "query": "from a_index | eval mv_slice(versionField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField / 2)", + "query": "from a_index | eval var = mv_slice(to_version(stringField), to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField / 2)", - "error": [], + "query": "from a_index | eval mv_slice(versionField, booleanField, booleanField)", + "error": [ + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]", + "Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField / 2)", - "error": [], + "query": "from a_index | eval mv_slice(booleanField, numberField, numberField, extraArg)", + "error": [ + "Error: [mv_slice] function expects no more than 3 arguments, got 4." + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField / 2)", + "query": "from a_index | sort mv_slice(booleanField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField)", + "query": "row var = mv_sort(\"a\", \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField)", + "query": "row mv_sort(\"a\", \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField)", + "query": "from a_index | eval var = mv_sort(stringField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField) by round(numberField / 2)", + "query": "from a_index | eval mv_sort(stringField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | sort mv_sort(stringField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), ipField", + "query": "row var = mv_sort(true, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), ipField", + "query": "row mv_sort(true, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), numberField / 2", + "query": "row var = mv_sort(now(), \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "row mv_sort(now(), \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "row var = mv_sort(5, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "row mv_sort(5, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(stringField)", - "error": [ - "Argument of [median_absolute_deviation] must be [number], found value [stringField] type [string]" - ], + "query": "row var = mv_sort(to_ip(\"127.0.0.1\"), \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(*)", - "error": [ - "Using wildcards (*) in median_absolute_deviation is not allowed" - ], + "query": "row mv_sort(to_ip(\"127.0.0.1\"), \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | sort median_absolute_deviation(numberField)", - "error": [ - "SORT does not support function median_absolute_deviation" - ], + "query": "row var = mv_sort(to_version(\"1.0.0\"), \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | where median_absolute_deviation(numberField)", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], + "query": "row mv_sort(to_version(\"1.0.0\"), \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | where median_absolute_deviation(numberField) > 0", + "query": "row var = mv_sort(to_cartesianpoint(\"POINT (30 10)\"), true)", "error": [ - "WHERE does not support function median_absolute_deviation" + "Argument of [mv_sort] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]", + "Argument of [mv_sort] must be [string], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = median_absolute_deviation(numberField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], + "query": "from a_index | where mv_sort(numberField, \"asc\") > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = median_absolute_deviation(numberField) > 0", + "query": "from a_index | where mv_sort(cartesianPointField, booleanField) > 0", "error": [ - "EVAL does not support function median_absolute_deviation" + "Argument of [mv_sort] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [mv_sort] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval median_absolute_deviation(numberField)", - "error": [ - "EVAL does not support function median_absolute_deviation" - ], + "query": "from a_index | where length(mv_sort(stringField, \"asc\")) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval median_absolute_deviation(numberField) > 0", + "query": "from a_index | where length(mv_sort(cartesianPointField, booleanField)) > 0", "error": [ - "EVAL does not support function median_absolute_deviation" + "Argument of [mv_sort] must be [boolean], found value [cartesianPointField] type [cartesian_point]", + "Argument of [mv_sort] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats var = percentile(numberField, 5)", + "query": "from a_index | eval var = mv_sort(booleanField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, 5)", + "query": "from a_index | eval mv_sort(booleanField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(percentile(numberField, 5))", + "query": "from a_index | eval var = mv_sort(dateField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(percentile(numberField, 5))", + "query": "from a_index | eval mv_sort(dateField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(percentile(numberField, 5)) + percentile(numberField, 5)", + "query": "from a_index | eval var = mv_sort(numberField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(percentile(numberField, 5)) + percentile(numberField, 5)", + "query": "from a_index | eval mv_sort(numberField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, numberField)", - "error": [ - "Argument of [percentile] must be a constant, received [numberField]" - ], + "query": "from a_index | eval var = mv_sort(ipField, \"asc\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField / 2, 5)", + "query": "from a_index | eval mv_sort(ipField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField / 2, 5)", + "query": "from a_index | eval var = mv_sort(versionField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField / 2, 5)", + "query": "from a_index | eval mv_sort(versionField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField / 2, 5)", - "error": [], + "query": "from a_index | eval mv_sort(booleanField, \"asc\", extraArg)", + "error": [ + "Error: [mv_sort] function expects no more than 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField, 5)", + "query": "from a_index | sort mv_sort(booleanField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5)", + "query": "row var = mv_sum(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5)", + "query": "row mv_sum(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, 5) by round(numberField / 2)", + "query": "row var = mv_sum(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField, 5) by var1 = round(numberField / 2)", - "error": [], + "query": "row var = mv_sum(\"a\")", + "error": [ + "Argument of [mv_sum] must be [number], found value [\"a\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), ipField", + "query": "from a_index | where mv_sum(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), ipField", - "error": [], + "query": "from a_index | where mv_sum(stringField) > 0", + "error": [ + "Argument of [mv_sum] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = mv_sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval mv_sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = percentile(avg(numberField), 5)", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "from a_index | eval var = mv_sum(to_integer(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(avg(numberField), 5)", + "query": "from a_index | eval mv_sum(stringField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [mv_sum] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats percentile(stringField, 5)", + "query": "from a_index | eval mv_sum(numberField, extraArg)", "error": [ - "Argument of [percentile] must be [number], found value [stringField] type [string]" + "Error: [mv_sum] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | sort percentile(numberField, 5)", + "query": "from a_index | eval var = mv_sum(*)", "error": [ - "SORT does not support function percentile" + "Using wildcards (*) in mv_sum is not allowed" ], "warning": [] }, { - "query": "from a_index | where percentile(numberField, 5)", - "error": [ - "WHERE does not support function percentile" - ], + "query": "from a_index | sort mv_sum(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | where percentile(numberField, 5) > 0", - "error": [ - "WHERE does not support function percentile" - ], + "query": "row var = mv_sum(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = percentile(numberField, 5)", + "query": "row var = mv_sum(true)", "error": [ - "EVAL does not support function percentile" + "Argument of [mv_sum] must be [number], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = percentile(numberField, 5) > 0", + "query": "from a_index | where mv_sum(booleanField) > 0", "error": [ - "EVAL does not support function percentile" + "Argument of [mv_sum] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval percentile(numberField, 5)", - "error": [ - "EVAL does not support function percentile" - ], + "query": "from a_index | eval var = mv_sum(to_integer(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval percentile(numberField, 5) > 0", + "query": "from a_index | eval mv_sum(booleanField)", "error": [ - "EVAL does not support function percentile" + "Argument of [mv_sum] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats var = max(numberField)", + "query": "row var = mv_zip(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField)", + "query": "row var = mv_zip(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(numberField))", + "query": "row mv_zip(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(numberField))", + "query": "row mv_zip(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(numberField)) + max(numberField)", + "query": "row var = mv_zip(to_string(\"a\"), to_string(\"a\"), to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(numberField)) + max(numberField)", - "error": [], + "query": "row var = mv_zip(5, 5, 5)", + "error": [ + "Argument of [mv_zip] must be [string], found value [5] type [number]", + "Argument of [mv_zip] must be [string], found value [5] type [number]", + "Argument of [mv_zip] must be [string], found value [5] type [number]" + ], "warning": [] }, { - "query": "from a_index | stats max(numberField / 2)", + "query": "from a_index | where length(mv_zip(stringField, stringField, stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField / 2)", - "error": [], + "query": "from a_index | where length(mv_zip(numberField, numberField, numberField)) > 0", + "error": [ + "Argument of [mv_zip] must be [string], found value [numberField] type [number]", + "Argument of [mv_zip] must be [string], found value [numberField] type [number]", + "Argument of [mv_zip] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField / 2)", + "query": "from a_index | eval var = mv_zip(stringField, stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField / 2)", + "query": "from a_index | eval mv_zip(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField)", + "query": "from a_index | eval mv_zip(stringField, stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField)", + "query": "from a_index | eval var = mv_zip(to_string(stringField), to_string(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField)", - "error": [], + "query": "from a_index | eval mv_zip(numberField, numberField, numberField)", + "error": [ + "Argument of [mv_zip] must be [string], found value [numberField] type [number]", + "Argument of [mv_zip] must be [string], found value [numberField] type [number]", + "Argument of [mv_zip] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | stats max(numberField) by round(numberField / 2)", - "error": [], + "query": "from a_index | eval mv_zip(stringField, stringField, stringField, extraArg)", + "error": [ + "Error: [mv_zip] function expects no more than 3 arguments, got 4." + ], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | sort mv_zip(stringField, stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), ipField", + "query": "row var = mv_zip(to_string(true), to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), ipField", - "error": [], + "query": "row var = mv_zip(true, true, true)", + "error": [ + "Argument of [mv_zip] must be [string], found value [true] type [boolean]", + "Argument of [mv_zip] must be [string], found value [true] type [boolean]", + "Argument of [mv_zip] must be [string], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), numberField / 2", - "error": [], + "query": "from a_index | where length(mv_zip(booleanField, booleanField, booleanField)) > 0", + "error": [ + "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", + "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", + "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = max(avg(numberField))", + "query": "from a_index | eval mv_zip(booleanField, booleanField, booleanField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", + "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]", + "Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats max(avg(numberField))", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" - ], + "query": "row var = now()", + "error": [], "warning": [] }, { - "query": "from a_index | stats max(stringField)", - "error": [ - "Argument of [max] must be [number], found value [stringField] type [string]" - ], + "query": "row now()", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = max(*)", + "query": "from a_index | eval var = now()", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval now()", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval now(extraArg)", "error": [ - "Using wildcards (*) in max is not allowed" + "Error: [now] function expects exactly 0 arguments, got 1." ], "warning": [] }, { - "query": "from a_index | stats var = max(dateField)", + "query": "from a_index | sort now()", "error": [], "warning": [] }, { - "query": "from a_index | stats max(dateField)", + "query": "row var = pi()", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(dateField))", + "query": "row pi()", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(dateField))", + "query": "from a_index | where pi() > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(dateField)) + max(dateField)", + "query": "from a_index | eval var = pi()", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(dateField)) + max(dateField)", + "query": "from a_index | eval pi()", "error": [], "warning": [] }, { - "query": "from a_index | sort max(numberField)", + "query": "from a_index | eval pi(extraArg)", "error": [ - "SORT does not support function max" + "Error: [pi] function expects exactly 0 arguments, got 1." ], "warning": [] }, { - "query": "from a_index | where max(numberField)", - "error": [ - "WHERE does not support function max" - ], + "query": "from a_index | sort pi()", + "error": [], "warning": [] }, { - "query": "from a_index | where max(numberField) > 0", - "error": [ - "WHERE does not support function max" - ], + "query": "row var = pow(5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | where max(dateField)", - "error": [ - "WHERE does not support function max" - ], + "query": "row pow(5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | where max(dateField) > 0", - "error": [ - "WHERE does not support function max" - ], + "query": "row var = pow(to_integer(\"a\"), to_integer(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(numberField)", + "query": "row var = pow(\"a\", \"a\")", "error": [ - "EVAL does not support function max" + "Argument of [pow] must be [number], found value [\"a\"] type [string]", + "Argument of [pow] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = max(numberField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | where pow(numberField, numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval max(numberField)", + "query": "from a_index | where pow(stringField, stringField) > 0", "error": [ - "EVAL does not support function max" + "Argument of [pow] must be [number], found value [stringField] type [string]", + "Argument of [pow] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval max(numberField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = pow(numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(dateField)", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval pow(numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(dateField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = pow(to_integer(stringField), to_integer(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval max(dateField)", + "query": "from a_index | eval pow(stringField, stringField)", "error": [ - "EVAL does not support function max" + "Argument of [pow] must be [number], found value [stringField] type [string]", + "Argument of [pow] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval max(dateField) > 0", + "query": "from a_index | eval pow(numberField, numberField, extraArg)", "error": [ - "EVAL does not support function max" + "Error: [pow] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | stats var = min(numberField)", + "query": "from a_index | sort pow(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField)", + "query": "row var = pow(to_integer(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(numberField))", - "error": [], + "query": "row var = pow(true, true)", + "error": [ + "Argument of [pow] must be [number], found value [true] type [boolean]", + "Argument of [pow] must be [number], found value [true] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats round(min(numberField))", - "error": [], + "query": "from a_index | where pow(booleanField, booleanField) > 0", + "error": [ + "Argument of [pow] must be [number], found value [booleanField] type [boolean]", + "Argument of [pow] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats var = round(min(numberField)) + min(numberField)", + "query": "from a_index | eval var = pow(to_integer(booleanField), to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(numberField)) + min(numberField)", - "error": [], + "query": "from a_index | eval pow(booleanField, booleanField)", + "error": [ + "Argument of [pow] must be [number], found value [booleanField] type [boolean]", + "Argument of [pow] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats min(numberField / 2)", + "query": "row var = replace(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField / 2)", + "query": "row replace(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField / 2)", + "query": "row var = replace(to_string(\"a\"), to_string(\"a\"), to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField / 2)", - "error": [], + "query": "row var = replace(5, 5, 5)", + "error": [ + "Argument of [replace] must be [string], found value [5] type [number]", + "Argument of [replace] must be [string], found value [5] type [number]", + "Argument of [replace] must be [string], found value [5] type [number]" + ], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField)", + "query": "from a_index | where length(replace(stringField, stringField, stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField)", - "error": [], + "query": "from a_index | where length(replace(numberField, numberField, numberField)) > 0", + "error": [ + "Argument of [replace] must be [string], found value [numberField] type [number]", + "Argument of [replace] must be [string], found value [numberField] type [number]", + "Argument of [replace] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField)", + "query": "from a_index | eval var = replace(stringField, stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField) by round(numberField / 2)", + "query": "from a_index | eval replace(stringField, stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | eval var = replace(to_string(stringField), to_string(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), ipField", - "error": [], + "query": "from a_index | eval replace(numberField, numberField, numberField)", + "error": [ + "Argument of [replace] must be [string], found value [numberField] type [number]", + "Argument of [replace] must be [string], found value [numberField] type [number]", + "Argument of [replace] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), ipField", - "error": [], + "query": "from a_index | eval replace(stringField, stringField, stringField, extraArg)", + "error": [ + "Error: [replace] function expects exactly 3 arguments, got 4." + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | sort replace(stringField, stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "row var = replace(to_string(true), to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = min(avg(numberField))", + "query": "row var = replace(true, true, true)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [replace] must be [string], found value [true] type [boolean]", + "Argument of [replace] must be [string], found value [true] type [boolean]", + "Argument of [replace] must be [string], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats min(avg(numberField))", + "query": "from a_index | where length(replace(booleanField, booleanField, booleanField)) > 0", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [replace] must be [string], found value [booleanField] type [boolean]", + "Argument of [replace] must be [string], found value [booleanField] type [boolean]", + "Argument of [replace] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats min(stringField)", + "query": "from a_index | eval var = replace(to_string(booleanField), to_string(booleanField), to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval replace(booleanField, booleanField, booleanField)", "error": [ - "Argument of [min] must be [number], found value [stringField] type [string]" + "Argument of [replace] must be [string], found value [booleanField] type [boolean]", + "Argument of [replace] must be [string], found value [booleanField] type [boolean]", + "Argument of [replace] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats var = min(*)", + "query": "row var = right(\"a\", 5)", + "error": [], + "warning": [] + }, + { + "query": "row right(\"a\", 5)", + "error": [], + "warning": [] + }, + { + "query": "row var = right(to_string(\"a\"), to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = right(5, \"a\")", "error": [ - "Using wildcards (*) in min is not allowed" + "Argument of [right] must be [string], found value [5] type [number]", + "Argument of [right] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | stats var = min(dateField)", + "query": "from a_index | where length(right(stringField, numberField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats min(dateField)", + "query": "from a_index | where length(right(numberField, stringField)) > 0", + "error": [ + "Argument of [right] must be [string], found value [numberField] type [number]", + "Argument of [right] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = right(stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(dateField))", + "query": "from a_index | eval right(stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(dateField))", + "query": "from a_index | eval var = right(to_string(stringField), to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(dateField)) + min(dateField)", + "query": "from a_index | eval right(numberField, stringField)", + "error": [ + "Argument of [right] must be [string], found value [numberField] type [number]", + "Argument of [right] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval right(stringField, numberField, extraArg)", + "error": [ + "Error: [right] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | sort right(stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(dateField)) + min(dateField)", + "query": "row var = right(to_string(true), to_integer(true))", "error": [], "warning": [] }, { - "query": "from a_index | sort min(numberField)", + "query": "row var = right(true, true)", "error": [ - "SORT does not support function min" + "Argument of [right] must be [string], found value [true] type [boolean]", + "Argument of [right] must be [number], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where min(numberField)", + "query": "from a_index | where length(right(booleanField, booleanField)) > 0", "error": [ - "WHERE does not support function min" + "Argument of [right] must be [string], found value [booleanField] type [boolean]", + "Argument of [right] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where min(numberField) > 0", + "query": "from a_index | eval var = right(to_string(booleanField), to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval right(booleanField, booleanField)", "error": [ - "WHERE does not support function min" + "Argument of [right] must be [string], found value [booleanField] type [boolean]", + "Argument of [right] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where min(dateField)", + "query": "row var = round(5, 5)", + "error": [], + "warning": [] + }, + { + "query": "row round(5, 5)", + "error": [], + "warning": [] + }, + { + "query": "row var = round(to_integer(\"a\"), to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = round(\"a\", \"a\")", "error": [ - "WHERE does not support function min" + "Argument of [round] must be [number], found value [\"a\"] type [string]", + "Argument of [round] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | where min(dateField) > 0", + "query": "from a_index | where round(numberField, numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where round(stringField, stringField) > 0", "error": [ - "WHERE does not support function min" + "Argument of [round] must be [number], found value [stringField] type [string]", + "Argument of [round] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = min(numberField)", + "query": "from a_index | eval var = round(numberField, numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval round(numberField, numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = round(to_integer(stringField), to_integer(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval round(stringField, stringField)", "error": [ - "EVAL does not support function min" + "Argument of [round] must be [number], found value [stringField] type [string]", + "Argument of [round] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = min(numberField) > 0", + "query": "from a_index | eval round(numberField, numberField, extraArg)", "error": [ - "EVAL does not support function min" + "Error: [round] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval min(numberField)", + "query": "from a_index | sort round(numberField, numberField)", + "error": [], + "warning": [] + }, + { + "query": "row var = round(5)", + "error": [], + "warning": [] + }, + { + "query": "row round(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = round(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = round(to_integer(true), to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = round(true, true)", "error": [ - "EVAL does not support function min" + "Argument of [round] must be [number], found value [true] type [boolean]", + "Argument of [round] must be [number], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval min(numberField) > 0", + "query": "from a_index | where round(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where round(booleanField) > 0", "error": [ - "EVAL does not support function min" + "Argument of [round] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = min(dateField)", + "query": "from a_index | where round(booleanField, booleanField) > 0", "error": [ - "EVAL does not support function min" + "Argument of [round] must be [number], found value [booleanField] type [boolean]", + "Argument of [round] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = min(dateField) > 0", + "query": "from a_index | eval var = round(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval round(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = round(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval round(booleanField)", "error": [ - "EVAL does not support function min" + "Argument of [round] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval min(dateField)", + "query": "from a_index | eval var = round(*)", "error": [ - "EVAL does not support function min" + "Using wildcards (*) in round is not allowed" ], "warning": [] }, { - "query": "from a_index | eval min(dateField) > 0", + "query": "from a_index | eval var = round(to_integer(booleanField), to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval round(booleanField, booleanField)", "error": [ - "EVAL does not support function min" + "Argument of [round] must be [number], found value [booleanField] type [boolean]", + "Argument of [round] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats var = count(stringField)", + "query": "from a_index | sort round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats count(stringField)", + "query": "row var = rtrim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count(stringField))", + "query": "row rtrim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count(stringField))", + "query": "row var = rtrim(to_string(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = rtrim(5)", + "error": [ + "Argument of [rtrim] must be [string], found value [5] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | where length(rtrim(stringField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(rtrim(numberField)) > 0", + "error": [ + "Argument of [rtrim] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = rtrim(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval rtrim(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = rtrim(to_string(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval rtrim(numberField)", + "error": [ + "Argument of [rtrim] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval rtrim(stringField, extraArg)", + "error": [ + "Error: [rtrim] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = rtrim(*)", + "error": [ + "Using wildcards (*) in rtrim is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort rtrim(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = rtrim(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count(stringField)) + count(stringField)", + "query": "row var = rtrim(true)", + "error": [ + "Argument of [rtrim] must be [string], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where length(rtrim(booleanField)) > 0", + "error": [ + "Argument of [rtrim] must be [string], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = rtrim(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval rtrim(booleanField)", + "error": [ + "Argument of [rtrim] must be [string], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = signum(5)", + "error": [], + "warning": [] + }, + { + "query": "row signum(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = signum(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = signum(\"a\")", + "error": [ + "Argument of [signum] must be [number], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | where signum(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where signum(stringField) > 0", + "error": [ + "Argument of [signum] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = signum(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval signum(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = signum(to_integer(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval signum(stringField)", + "error": [ + "Argument of [signum] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval signum(numberField, extraArg)", + "error": [ + "Error: [signum] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = signum(*)", + "error": [ + "Using wildcards (*) in signum is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort signum(numberField)", + "error": [], + "warning": [] + }, + { + "query": "row var = signum(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = signum(true)", + "error": [ + "Argument of [signum] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where signum(booleanField) > 0", + "error": [ + "Argument of [signum] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = signum(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval signum(booleanField)", + "error": [ + "Argument of [signum] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = sin(5)", + "error": [], + "warning": [] + }, + { + "query": "row sin(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = sin(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = sin(\"a\")", + "error": [ + "Argument of [sin] must be [number], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | where sin(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where sin(stringField) > 0", + "error": [ + "Argument of [sin] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sin(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval sin(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = sin(to_integer(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval sin(stringField)", + "error": [ + "Argument of [sin] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval sin(numberField, extraArg)", + "error": [ + "Error: [sin] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sin(*)", + "error": [ + "Using wildcards (*) in sin is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort sin(numberField)", + "error": [], + "warning": [] + }, + { + "query": "row var = sin(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = sin(true)", + "error": [ + "Argument of [sin] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where sin(booleanField) > 0", + "error": [ + "Argument of [sin] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sin(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval sin(booleanField)", + "error": [ + "Argument of [sin] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = sinh(5)", + "error": [], + "warning": [] + }, + { + "query": "row sinh(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = sinh(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = sinh(\"a\")", + "error": [ + "Argument of [sinh] must be [number], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | where sinh(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where sinh(stringField) > 0", + "error": [ + "Argument of [sinh] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sinh(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval sinh(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = sinh(to_integer(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval sinh(stringField)", + "error": [ + "Argument of [sinh] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval sinh(numberField, extraArg)", + "error": [ + "Error: [sinh] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sinh(*)", + "error": [ + "Using wildcards (*) in sinh is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort sinh(numberField)", + "error": [], + "warning": [] + }, + { + "query": "row var = sinh(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = sinh(true)", + "error": [ + "Argument of [sinh] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where sinh(booleanField) > 0", + "error": [ + "Argument of [sinh] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sinh(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval sinh(booleanField)", + "error": [ + "Argument of [sinh] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = split(\"a\", \"a\")", + "error": [], + "warning": [] + }, + { + "query": "row split(\"a\", \"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = split(to_string(\"a\"), to_string(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = split(5, 5)", + "error": [ + "Argument of [split] must be [string], found value [5] type [number]", + "Argument of [split] must be [string], found value [5] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | where length(split(stringField, stringField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(split(numberField, numberField)) > 0", + "error": [ + "Argument of [split] must be [string], found value [numberField] type [number]", + "Argument of [split] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = split(stringField, stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval split(stringField, stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = split(to_string(stringField), to_string(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval split(numberField, numberField)", + "error": [ + "Argument of [split] must be [string], found value [numberField] type [number]", + "Argument of [split] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval split(stringField, stringField, extraArg)", + "error": [ + "Error: [split] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | sort split(stringField, stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = split(to_string(true), to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = split(true, true)", + "error": [ + "Argument of [split] must be [string], found value [true] type [boolean]", + "Argument of [split] must be [string], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where length(split(booleanField, booleanField)) > 0", + "error": [ + "Argument of [split] must be [string], found value [booleanField] type [boolean]", + "Argument of [split] must be [string], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = split(to_string(booleanField), to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval split(booleanField, booleanField)", + "error": [ + "Argument of [split] must be [string], found value [booleanField] type [boolean]", + "Argument of [split] must be [string], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = sqrt(5)", + "error": [], + "warning": [] + }, + { + "query": "row sqrt(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = sqrt(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = sqrt(\"a\")", + "error": [ + "Argument of [sqrt] must be [number], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | where sqrt(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where sqrt(stringField) > 0", + "error": [ + "Argument of [sqrt] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sqrt(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval sqrt(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = sqrt(to_integer(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval sqrt(stringField)", + "error": [ + "Argument of [sqrt] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval sqrt(numberField, extraArg)", + "error": [ + "Error: [sqrt] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sqrt(*)", + "error": [ + "Using wildcards (*) in sqrt is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort sqrt(numberField)", + "error": [], + "warning": [] + }, + { + "query": "row var = sqrt(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = sqrt(true)", + "error": [ + "Argument of [sqrt] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where sqrt(booleanField) > 0", + "error": [ + "Argument of [sqrt] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sqrt(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval sqrt(booleanField)", + "error": [ + "Argument of [sqrt] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(\"a\", \"a\")", + "error": [ + "Argument of [st_contains] must be [cartesian_point], found value [\"a\"] type [string]", + "Argument of [st_contains] must be [cartesian_point], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(geoPointField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(geoPointField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(to_geopoint(stringField), to_geopoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(stringField, stringField)", + "error": [ + "Argument of [st_contains] must be [cartesian_point], found value [stringField] type [string]", + "Argument of [st_contains] must be [cartesian_point], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(geoPointField, geoPointField, extraArg)", + "error": [ + "Error: [st_contains] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(geoPointField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(geoPointField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(to_geopoint(stringField), geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(geoPointField, geoShapeField, extraArg)", + "error": [ + "Error: [st_contains] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(geoShapeField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(geoShapeField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(geoShapeField, to_geopoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(geoShapeField, geoPointField, extraArg)", + "error": [ + "Error: [st_contains] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(geoShapeField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(geoShapeField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(geoShapeField, geoShapeField, extraArg)", + "error": [ + "Error: [st_contains] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_contains] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(to_cartesianpoint(stringField), cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField, extraArg)", + "error": [ + "Error: [st_contains] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(cartesianShapeField, to_cartesianpoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_contains] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField, extraArg)", + "error": [ + "Error: [st_contains] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | sort st_contains(geoPointField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_contains(true, true)", + "error": [ + "Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(booleanField, booleanField)", + "error": [ + "Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort st_contains(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(\"a\", \"a\")", + "error": [ + "Argument of [st_disjoint] must be [cartesian_point], found value [\"a\"] type [string]", + "Argument of [st_disjoint] must be [cartesian_point], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(geoPointField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(geoPointField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(to_geopoint(stringField), to_geopoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(stringField, stringField)", + "error": [ + "Argument of [st_disjoint] must be [cartesian_point], found value [stringField] type [string]", + "Argument of [st_disjoint] must be [cartesian_point], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(geoPointField, geoPointField, extraArg)", + "error": [ + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(geoPointField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(to_geopoint(stringField), geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField, extraArg)", + "error": [ + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(geoShapeField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(geoShapeField, to_geopoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField, extraArg)", + "error": [ + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField, extraArg)", + "error": [ + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField, extraArg)", + "error": [ + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(cartesianShapeField, to_cartesianpoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField, extraArg)", + "error": [ + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | sort st_disjoint(geoPointField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_disjoint(true, true)", + "error": [ + "Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_disjoint(booleanField, booleanField)", + "error": [ + "Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort st_disjoint(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_intersects(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(\"a\", \"a\")", + "error": [ + "Argument of [st_intersects] must be [cartesian_point], found value [\"a\"] type [string]", + "Argument of [st_intersects] must be [cartesian_point], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "row var = st_intersects(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_intersects(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(geoPointField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(geoPointField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(to_geopoint(stringField), to_geopoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(stringField, stringField)", + "error": [ + "Argument of [st_intersects] must be [cartesian_point], found value [stringField] type [string]", + "Argument of [st_intersects] must be [cartesian_point], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(geoPointField, geoPointField, extraArg)", + "error": [ + "Error: [st_intersects] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(geoPointField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(geoPointField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(to_geopoint(stringField), geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(geoPointField, geoShapeField, extraArg)", + "error": [ + "Error: [st_intersects] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(geoShapeField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(geoShapeField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(geoShapeField, to_geopoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(geoShapeField, geoPointField, extraArg)", + "error": [ + "Error: [st_intersects] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(geoShapeField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField, extraArg)", + "error": [ + "Error: [st_intersects] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_intersects] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(to_cartesianpoint(stringField), cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField, extraArg)", + "error": [ + "Error: [st_intersects] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(cartesianShapeField, to_cartesianpoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_intersects] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField, extraArg)", + "error": [ + "Error: [st_intersects] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | sort st_intersects(geoPointField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_intersects(true, true)", + "error": [ + "Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_intersects(booleanField, booleanField)", + "error": [ + "Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort st_intersects(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_within(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(\"a\", \"a\")", + "error": [ + "Argument of [st_within] must be [cartesian_point], found value [\"a\"] type [string]", + "Argument of [st_within] must be [cartesian_point], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "row var = st_within(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_within(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(geoPointField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(geoPointField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_geopoint(stringField), to_geopoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(stringField, stringField)", + "error": [ + "Argument of [st_within] must be [cartesian_point], found value [stringField] type [string]", + "Argument of [st_within] must be [cartesian_point], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_within(geoPointField, geoPointField, extraArg)", + "error": [ + "Error: [st_within] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(geoPointField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(geoPointField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_geopoint(stringField), geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(geoPointField, geoShapeField, extraArg)", + "error": [ + "Error: [st_within] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(geoShapeField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(geoShapeField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(geoShapeField, to_geopoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(geoShapeField, geoPointField, extraArg)", + "error": [ + "Error: [st_within] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(geoShapeField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(geoShapeField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(geoShapeField, geoShapeField, extraArg)", + "error": [ + "Error: [st_within] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_within] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_cartesianpoint(stringField), cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField, extraArg)", + "error": [ + "Error: [st_within] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(cartesianShapeField, to_cartesianpoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField, extraArg)", + "error": [ + "Error: [st_within] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField, extraArg)", + "error": [ + "Error: [st_within] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | sort st_within(geoPointField, geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")), to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_geopoint(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(to_geoshape(to_geopoint(\"POINT (30 10)\")), to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_within(true, true)", + "error": [ + "Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]", + "Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_within(booleanField, booleanField)", + "error": [ + "Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]", + "Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort st_within(cartesianPointField, cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = st_x(to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_x(to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_x(to_geopoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_x(\"a\")", + "error": [ + "Argument of [st_x] must be [cartesian_point], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "row var = st_x(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_x(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_x(to_cartesianpoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_x(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_x(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_x(to_geopoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_x(stringField)", + "error": [ + "Argument of [st_x] must be [cartesian_point], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_x(geoPointField, extraArg)", + "error": [ + "Error: [st_x] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_x(*)", + "error": [ + "Using wildcards (*) in st_x is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_x(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_x(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_x(to_cartesianpoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_x(cartesianPointField, extraArg)", + "error": [ + "Error: [st_x] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort st_x(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = st_x(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_x(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_x(true)", + "error": [ + "Argument of [st_x] must be [cartesian_point], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_x(to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_x(booleanField)", + "error": [ + "Argument of [st_x] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_x(to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort st_x(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = st_y(to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_y(to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_y(to_geopoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_y(\"a\")", + "error": [ + "Argument of [st_y] must be [cartesian_point], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "row var = st_y(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row st_y(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_y(to_cartesianpoint(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_y(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_y(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_y(to_geopoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_y(stringField)", + "error": [ + "Argument of [st_y] must be [cartesian_point], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_y(geoPointField, extraArg)", + "error": [ + "Error: [st_y] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_y(*)", + "error": [ + "Using wildcards (*) in st_y is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_y(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_y(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = st_y(to_cartesianpoint(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_y(cartesianPointField, extraArg)", + "error": [ + "Error: [st_y] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort st_y(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = st_y(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_y(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = st_y(true)", + "error": [ + "Argument of [st_y] must be [cartesian_point], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_y(to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_y(booleanField)", + "error": [ + "Argument of [st_y] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_y(to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort st_y(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = starts_with(\"a\", \"a\")", + "error": [], + "warning": [] + }, + { + "query": "row starts_with(\"a\", \"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = starts_with(to_string(\"a\"), to_string(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = starts_with(5, 5)", + "error": [ + "Argument of [starts_with] must be [string], found value [5] type [number]", + "Argument of [starts_with] must be [string], found value [5] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = starts_with(stringField, stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval starts_with(stringField, stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = starts_with(to_string(stringField), to_string(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval starts_with(numberField, numberField)", + "error": [ + "Argument of [starts_with] must be [string], found value [numberField] type [number]", + "Argument of [starts_with] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval starts_with(stringField, stringField, extraArg)", + "error": [ + "Error: [starts_with] function expects exactly 2 arguments, got 3." + ], + "warning": [] + }, + { + "query": "from a_index | sort starts_with(stringField, stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = starts_with(to_string(true), to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = starts_with(true, true)", + "error": [ + "Argument of [starts_with] must be [string], found value [true] type [boolean]", + "Argument of [starts_with] must be [string], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = starts_with(to_string(booleanField), to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval starts_with(booleanField, booleanField)", + "error": [ + "Argument of [starts_with] must be [string], found value [booleanField] type [boolean]", + "Argument of [starts_with] must be [string], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = substring(\"a\", 5, 5)", + "error": [], + "warning": [] + }, + { + "query": "row var = substring(\"a\", 5)", + "error": [], + "warning": [] + }, + { + "query": "row substring(\"a\", 5, 5)", + "error": [], + "warning": [] + }, + { + "query": "row substring(\"a\", 5)", + "error": [], + "warning": [] + }, + { + "query": "row var = substring(to_string(\"a\"), to_integer(\"a\"), to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = substring(5, \"a\", \"a\")", + "error": [ + "Argument of [substring] must be [string], found value [5] type [number]", + "Argument of [substring] must be [number], found value [\"a\"] type [string]", + "Argument of [substring] must be [number], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | where length(substring(stringField, numberField, numberField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(substring(numberField, stringField, stringField)) > 0", + "error": [ + "Argument of [substring] must be [string], found value [numberField] type [number]", + "Argument of [substring] must be [number], found value [stringField] type [string]", + "Argument of [substring] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = substring(stringField, numberField, numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval substring(stringField, numberField, numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = substring(to_string(stringField), to_integer(stringField), to_integer(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval substring(numberField, stringField, stringField)", + "error": [ + "Argument of [substring] must be [string], found value [numberField] type [number]", + "Argument of [substring] must be [number], found value [stringField] type [string]", + "Argument of [substring] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval substring(stringField, numberField, numberField, extraArg)", + "error": [ + "Error: [substring] function expects no more than 3 arguments, got 4." + ], + "warning": [] + }, + { + "query": "from a_index | sort substring(stringField, numberField, numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort substring(stringField, numberField)", + "error": [], + "warning": [] + }, + { + "query": "row var = substring(to_string(true), to_integer(true), to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = substring(true, true, true)", + "error": [ + "Argument of [substring] must be [string], found value [true] type [boolean]", + "Argument of [substring] must be [number], found value [true] type [boolean]", + "Argument of [substring] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where length(substring(booleanField, booleanField, booleanField)) > 0", + "error": [ + "Argument of [substring] must be [string], found value [booleanField] type [boolean]", + "Argument of [substring] must be [number], found value [booleanField] type [boolean]", + "Argument of [substring] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = substring(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval substring(booleanField, booleanField, booleanField)", + "error": [ + "Argument of [substring] must be [string], found value [booleanField] type [boolean]", + "Argument of [substring] must be [number], found value [booleanField] type [boolean]", + "Argument of [substring] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = tan(5)", + "error": [], + "warning": [] + }, + { + "query": "row tan(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = tan(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = tan(\"a\")", + "error": [ + "Argument of [tan] must be [number], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | where tan(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where tan(stringField) > 0", + "error": [ + "Argument of [tan] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = tan(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval tan(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = tan(to_integer(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval tan(stringField)", + "error": [ + "Argument of [tan] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval tan(numberField, extraArg)", + "error": [ + "Error: [tan] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = tan(*)", + "error": [ + "Using wildcards (*) in tan is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort tan(numberField)", + "error": [], + "warning": [] + }, + { + "query": "row var = tan(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = tan(true)", + "error": [ + "Argument of [tan] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where tan(booleanField) > 0", + "error": [ + "Argument of [tan] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = tan(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval tan(booleanField)", + "error": [ + "Argument of [tan] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = tanh(5)", + "error": [], + "warning": [] + }, + { + "query": "row tanh(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = tanh(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = tanh(\"a\")", + "error": [ + "Argument of [tanh] must be [number], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | where tanh(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where tanh(stringField) > 0", + "error": [ + "Argument of [tanh] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = tanh(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval tanh(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = tanh(to_integer(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval tanh(stringField)", + "error": [ + "Argument of [tanh] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval tanh(numberField, extraArg)", + "error": [ + "Error: [tanh] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = tanh(*)", + "error": [ + "Using wildcards (*) in tanh is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort tanh(numberField)", + "error": [], + "warning": [] + }, + { + "query": "row var = tanh(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = tanh(true)", + "error": [ + "Argument of [tanh] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where tanh(booleanField) > 0", + "error": [ + "Argument of [tanh] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = tanh(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval tanh(booleanField)", + "error": [ + "Argument of [tanh] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = tau()", + "error": [], + "warning": [] + }, + { + "query": "row tau()", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where tau() > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = tau()", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval tau()", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval tau(extraArg)", + "error": [ + "Error: [tau] function expects exactly 0 arguments, got 1." + ], + "warning": [] + }, + { + "query": "from a_index | sort tau()", + "error": [], + "warning": [] + }, + { + "query": "row var = to_boolean(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_boolean(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_bool(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_boolean(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_boolean(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_bool(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_boolean(*)", + "error": [ + "Using wildcards (*) in to_boolean is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_boolean(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_boolean(true)", + "error": [], + "warning": [] + }, + { + "query": "row to_boolean(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_bool(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_boolean(to_boolean(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_boolean(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_boolean(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_bool(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_boolean(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_boolean(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_boolean(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_boolean] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_boolean(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_boolean(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_bool(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_boolean(to_boolean(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_boolean(cartesianPointField)", + "error": [ + "Argument of [to_boolean] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_boolean(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_boolean(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_bool(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_boolean(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_boolean(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_boolean(booleanField, extraArg)", + "error": [ + "Error: [to_boolean] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_boolean(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_cartesianpoint(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_cartesianpoint(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianpoint(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_cartesianpoint(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianpoint(*)", + "error": [ + "Using wildcards (*) in to_cartesianpoint is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_cartesianpoint(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_cartesianpoint(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_cartesianpoint(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_cartesianpoint(true)", + "error": [ + "Argument of [to_cartesianpoint] must be [cartesian_point], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianpoint(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_cartesianpoint(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_cartesianpoint(booleanField)", + "error": [ + "Argument of [to_cartesianpoint] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianpoint(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_cartesianpoint(cartesianPointField, extraArg)", + "error": [ + "Error: [to_cartesianpoint] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_cartesianpoint(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_cartesianshape(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_cartesianshape(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianshape(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_cartesianshape(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianshape(*)", + "error": [ + "Using wildcards (*) in to_cartesianshape is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_cartesianshape(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_cartesianshape(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_cartesianshape(to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_cartesianshape(to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_cartesianshape(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_cartesianshape(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_cartesianshape(true)", + "error": [ + "Argument of [to_cartesianshape] must be [cartesian_point], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianshape(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_cartesianshape(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianshape(to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_cartesianshape(booleanField)", + "error": [ + "Argument of [to_cartesianshape] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianshape(cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_cartesianshape(cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianshape(to_cartesianshape(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_cartesianshape(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_cartesianshape(cartesianPointField, extraArg)", + "error": [ + "Error: [to_cartesianshape] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_cartesianshape(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_datetime(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_datetime(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_dt(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_datetime(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_datetime(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_dt(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_datetime(*)", + "error": [ + "Using wildcards (*) in to_datetime is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_datetime(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_datetime(now())", + "error": [], + "warning": [] + }, + { + "query": "row to_datetime(now())", + "error": [], + "warning": [] + }, + { + "query": "row var = to_dt(now())", + "error": [], + "warning": [] + }, + { + "query": "row var = to_datetime(to_datetime(now()))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_datetime(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_datetime(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_dt(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_datetime(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_datetime(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_datetime(true)", + "error": [ + "Argument of [to_datetime] must be [date], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_datetime(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_datetime(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_dt(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_datetime(to_datetime(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_datetime(booleanField)", + "error": [ + "Argument of [to_datetime] must be [date], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_datetime(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_datetime(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_dt(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_datetime(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_datetime(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_datetime(dateField, extraArg)", + "error": [ + "Error: [to_datetime] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_datetime(dateField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_degrees(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_degrees(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_degrees(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_degrees(\"a\")", + "error": [ + "Argument of [to_degrees] must be [number], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_degrees(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_degrees(stringField) > 0", + "error": [ + "Argument of [to_degrees] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_degrees(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_degrees(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_degrees(to_integer(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_degrees(stringField)", + "error": [ + "Argument of [to_degrees] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval to_degrees(numberField, extraArg)", + "error": [ + "Error: [to_degrees] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_degrees(*)", + "error": [ + "Using wildcards (*) in to_degrees is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_degrees(numberField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_degrees(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_degrees(true)", + "error": [ + "Argument of [to_degrees] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_degrees(booleanField) > 0", + "error": [ + "Argument of [to_degrees] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_degrees(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_degrees(booleanField)", + "error": [ + "Argument of [to_degrees] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = to_double(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_double(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_dbl(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_double(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_double(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_dbl(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_double(*)", + "error": [ + "Using wildcards (*) in to_double is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_double(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_double(true)", + "error": [], + "warning": [] + }, + { + "query": "row to_double(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_dbl(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_double(to_boolean(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_double(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_double(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_dbl(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_double(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_double(now())", + "error": [], + "warning": [] + }, + { + "query": "row to_double(now())", + "error": [], + "warning": [] + }, + { + "query": "row var = to_dbl(now())", + "error": [], + "warning": [] + }, + { + "query": "row var = to_double(to_datetime(now()))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_double(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_double(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_double] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_double(booleanField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_double(cartesianPointField) > 0", + "error": [ + "Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_double(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_double(dateField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_double(stringField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_double(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_double(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_dbl(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_double(to_boolean(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_double(cartesianPointField)", + "error": [ + "Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_double(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_double(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_dbl(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_double(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_double(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_double(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_dbl(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_double(to_datetime(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_double(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_double(booleanField, extraArg)", + "error": [ + "Error: [to_double] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_double(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_geopoint(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_geopoint(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_geopoint(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_geopoint(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_geopoint(*)", + "error": [ + "Using wildcards (*) in to_geopoint is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_geopoint(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_geopoint(to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_geopoint(to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_geopoint(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_geopoint(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_geopoint(true)", + "error": [ + "Argument of [to_geopoint] must be [geo_point], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_geopoint(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_geopoint(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_geopoint(to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_geopoint(booleanField)", + "error": [ + "Argument of [to_geopoint] must be [geo_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_geopoint(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_geopoint(geoPointField, extraArg)", + "error": [ + "Error: [to_geopoint] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_geopoint(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_geoshape(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_geoshape(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_geoshape(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_geoshape(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_geoshape(*)", + "error": [ + "Using wildcards (*) in to_geoshape is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_geoshape(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_geoshape(to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_geoshape(to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_geoshape(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_geoshape(to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_geoshape(to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_geoshape(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_geoshape(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_geoshape(true)", + "error": [ + "Argument of [to_geoshape] must be [geo_point], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_geoshape(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_geoshape(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_geoshape(to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_geoshape(booleanField)", + "error": [ + "Argument of [to_geoshape] must be [geo_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_geoshape(geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_geoshape(geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_geoshape(to_geoshape(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_geoshape(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_geoshape(geoPointField, extraArg)", + "error": [ + "Error: [to_geoshape] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_geoshape(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_integer(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_int(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_int(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(*)", + "error": [ + "Using wildcards (*) in to_integer is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_integer(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(true)", + "error": [], + "warning": [] + }, + { + "query": "row to_integer(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_int(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(to_boolean(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_integer(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_int(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(now())", + "error": [], + "warning": [] + }, + { + "query": "row to_integer(now())", + "error": [], + "warning": [] + }, + { + "query": "row var = to_int(now())", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(to_datetime(now()))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_integer(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_integer] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_integer(booleanField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_integer(cartesianPointField) > 0", + "error": [ + "Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_integer(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_integer(dateField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_integer(stringField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_int(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(to_boolean(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(cartesianPointField)", + "error": [ + "Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_int(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_int(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(to_datetime(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_integer(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_integer(booleanField, extraArg)", + "error": [ + "Error: [to_integer] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_integer(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ip(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_ip(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_ip(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(*)", + "error": [ + "Using wildcards (*) in to_ip is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_ip(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ip(to_ip(\"127.0.0.1\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_ip(to_ip(\"127.0.0.1\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ip(to_ip(to_ip(\"127.0.0.1\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ip(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ip(true)", + "error": [ + "Argument of [to_ip] must be [ip], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_ip(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(to_ip(ipField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_ip(booleanField)", + "error": [ + "Argument of [to_ip] must be [ip], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ip(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_ip(ipField, extraArg)", + "error": [ + "Error: [to_ip] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_ip(ipField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_long(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(*)", + "error": [ + "Using wildcards (*) in to_long is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_long(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(true)", + "error": [], + "warning": [] + }, + { + "query": "row to_long(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_boolean(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_long(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(now())", + "error": [], + "warning": [] + }, + { + "query": "row to_long(now())", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_datetime(now()))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_long(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_long] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_long(booleanField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(cartesianPointField) > 0", + "error": [ + "Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_long(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(dateField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_long(stringField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_boolean(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(cartesianPointField)", + "error": [ + "Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_datetime(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_long(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_long(booleanField, extraArg)", + "error": [ + "Error: [to_long] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_lower(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_lower(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_lower(to_string(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_lower(5)", + "error": [ + "Argument of [to_lower] must be [string], found value [5] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | where length(to_lower(stringField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(to_lower(numberField)) > 0", + "error": [ + "Argument of [to_lower] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_lower(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_lower(to_string(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(numberField)", + "error": [ + "Argument of [to_lower] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(stringField, extraArg)", + "error": [ + "Error: [to_lower] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_lower(*)", + "error": [ + "Using wildcards (*) in to_lower is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_lower(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_lower(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_lower(true)", + "error": [ + "Argument of [to_lower] must be [string], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where length(to_lower(booleanField)) > 0", + "error": [ + "Argument of [to_lower] must be [string], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_lower(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_lower(booleanField)", + "error": [ + "Argument of [to_lower] must be [string], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = to_radians(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_radians(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(\"a\")", + "error": [ + "Argument of [to_radians] must be [number], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_radians(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_radians(stringField) > 0", + "error": [ + "Argument of [to_radians] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(to_integer(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(stringField)", + "error": [ + "Argument of [to_radians] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(numberField, extraArg)", + "error": [ + "Error: [to_radians] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(*)", + "error": [ + "Using wildcards (*) in to_radians is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_radians(numberField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_radians(true)", + "error": [ + "Argument of [to_radians] must be [number], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_radians(booleanField) > 0", + "error": [ + "Argument of [to_radians] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_radians(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_radians(booleanField)", + "error": [ + "Argument of [to_radians] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = to_string(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_string(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_str(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_string(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_str(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(*)", + "error": [ + "Using wildcards (*) in to_string is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_string(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(true)", + "error": [], + "warning": [] + }, + { + "query": "row to_string(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_str(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_boolean(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_string(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_str(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_cartesianpoint(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_string(to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_str(to_cartesianshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_cartesianshape(to_cartesianpoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(now())", + "error": [], + "warning": [] + }, + { + "query": "row to_string(now())", + "error": [], + "warning": [] + }, + { + "query": "row var = to_str(now())", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_datetime(now()))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_string(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_str(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_string(to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_str(to_geopoint(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_geopoint(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_string(to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_str(to_geoshape(\"POINT (30 10)\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_geoshape(to_geopoint(\"POINT (30 10)\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_ip(\"127.0.0.1\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_string(to_ip(\"127.0.0.1\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_str(to_ip(\"127.0.0.1\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_ip(to_ip(\"127.0.0.1\")))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_version(\"1.0.0\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_string(to_version(\"1.0.0\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_str(to_version(\"1.0.0\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_string(to_version(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(to_string(booleanField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(to_string(cartesianPointField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(to_string(cartesianShapeField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(to_string(dateField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(to_string(numberField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(to_string(geoPointField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(to_string(geoShapeField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(to_string(ipField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(to_string(stringField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(to_string(versionField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_string(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_str(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(to_boolean(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_string(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_str(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(to_cartesianpoint(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_string(cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_str(cartesianShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(to_cartesianshape(cartesianPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_string(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_str(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(to_datetime(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_string(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_str(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_string(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_str(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(to_geopoint(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_string(geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_str(geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(to_geoshape(geoPointField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_string(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_str(ipField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(to_ip(ipField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_string(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_str(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_string(to_version(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_string(booleanField, extraArg)", + "error": [ + "Error: [to_string] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_string(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(*)", + "error": [ + "Using wildcards (*) in to_unsigned_long is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_unsigned_long(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(true)", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(true)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_boolean(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(now())", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(now())", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(now())", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(now())", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_datetime(now()))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(5)", + "error": [], + "warning": [] + }, + { + "query": "row to_unsigned_long(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ul(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ulong(5)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_integer(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_unsigned_long(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [ + "Argument of [to_unsigned_long] must be [boolean], found value [to_cartesianpoint(\"POINT (30 10)\")] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(booleanField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(cartesianPointField) > 0", + "error": [ + "Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(dateField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where to_unsigned_long(stringField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_boolean(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(cartesianPointField)", + "error": [ + "Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_datetime(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ul(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ulong(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_unsigned_long(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_unsigned_long(booleanField, extraArg)", + "error": [ + "Error: [to_unsigned_long] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | sort to_unsigned_long(booleanField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_upper(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_upper(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_upper(to_string(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_upper(5)", + "error": [ + "Argument of [to_upper] must be [string], found value [5] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | where length(to_upper(stringField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(to_upper(numberField)) > 0", + "error": [ + "Argument of [to_upper] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_upper(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_upper(to_string(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(numberField)", + "error": [ + "Argument of [to_upper] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(stringField, extraArg)", + "error": [ + "Error: [to_upper] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_upper(*)", + "error": [ + "Using wildcards (*) in to_upper is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_upper(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_upper(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_upper(true)", + "error": [ + "Argument of [to_upper] must be [string], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where length(to_upper(booleanField)) > 0", + "error": [ + "Argument of [to_upper] must be [string], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_upper(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_upper(booleanField)", + "error": [ + "Argument of [to_upper] must be [string], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "row var = to_version(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row to_version(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ver(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_version(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ver(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_version(*)", + "error": [ + "Using wildcards (*) in to_version is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort to_version(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = to_version(to_version(\"1.0.0\"))", + "error": [], + "warning": [] + }, + { + "query": "row to_version(to_version(\"1.0.0\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_ver(to_version(\"1.0.0\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = to_version(true)", + "error": [ + "Argument of [to_version] must be [string], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = to_version(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = to_ver(versionField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval to_version(stringField, extraArg)", + "error": [ + "Error: [to_version] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "row var = trim(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row trim(\"a\")", + "error": [], + "warning": [] + }, + { + "query": "row var = trim(to_string(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = trim(5)", + "error": [ + "Argument of [trim] must be [string], found value [5] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | where length(trim(stringField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(trim(numberField)) > 0", + "error": [ + "Argument of [trim] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = trim(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = trim(to_string(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(numberField)", + "error": [ + "Argument of [trim] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval trim(stringField, extraArg)", + "error": [ + "Error: [trim] function expects exactly one argument, got 2." + ], + "warning": [] + }, + { + "query": "from a_index | eval var = trim(*)", + "error": [ + "Using wildcards (*) in trim is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort trim(stringField)", + "error": [], + "warning": [] + }, + { + "query": "row var = trim(to_string(true))", + "error": [], + "warning": [] + }, + { + "query": "row var = trim(true)", + "error": [ + "Argument of [trim] must be [string], found value [true] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | where length(trim(booleanField)) > 0", + "error": [ + "Argument of [trim] must be [string], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = trim(to_string(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval trim(booleanField)", + "error": [ + "Argument of [trim] must be [string], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(avg(numberField)) + avg(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(avg(numberField)) + avg(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), avg(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = avg(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), avg(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = avg(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField) by round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = avg(numberField) by var1 = round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(stringField)", + "error": [ + "Argument of [avg] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = avg(*)", + "error": [ + "Using wildcards (*) in avg is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort avg(numberField)", + "error": [ + "SORT does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(numberField)", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | where avg(numberField) > 0", + "error": [ + "WHERE does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(numberField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = avg(numberField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(numberField)", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | eval avg(numberField) > 0", + "error": [ + "EVAL does not support function avg" + ], + "warning": [] + }, + { + "query": "from a_index | stats avg(booleanField)", + "error": [ + "Argument of [avg] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(sum(numberField)) + sum(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(sum(numberField)) + sum(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), sum(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = sum(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), sum(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = sum(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(numberField) by round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = sum(numberField) by var1 = round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats sum(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats sum(stringField)", + "error": [ + "Argument of [sum] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = sum(*)", + "error": [ + "Using wildcards (*) in sum is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort sum(numberField)", + "error": [ + "SORT does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(numberField)", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | where sum(numberField) > 0", + "error": [ + "WHERE does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(numberField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = sum(numberField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(numberField)", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | eval sum(numberField) > 0", + "error": [ + "EVAL does not support function sum" + ], + "warning": [] + }, + { + "query": "from a_index | stats sum(booleanField)", + "error": [ + "Argument of [sum] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = median(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median(numberField)) + median(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median(numberField)) + median(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), median(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = median(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), median(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = median(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median(numberField) by round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median(numberField) by var1 = round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats median(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats median(stringField)", + "error": [ + "Argument of [median] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = median(*)", + "error": [ + "Using wildcards (*) in median is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort median(numberField)", + "error": [ + "SORT does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(numberField)", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | where median(numberField) > 0", + "error": [ + "WHERE does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(numberField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median(numberField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(numberField)", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | eval median(numberField) > 0", + "error": [ + "EVAL does not support function median" + ], + "warning": [] + }, + { + "query": "from a_index | stats median(booleanField)", + "error": [ + "Argument of [median] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(numberField) by round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(stringField)", + "error": [ + "Argument of [median_absolute_deviation] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = median_absolute_deviation(*)", + "error": [ + "Using wildcards (*) in median_absolute_deviation is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort median_absolute_deviation(numberField)", + "error": [ + "SORT does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(numberField)", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | where median_absolute_deviation(numberField) > 0", + "error": [ + "WHERE does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(numberField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = median_absolute_deviation(numberField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(numberField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | eval median_absolute_deviation(numberField) > 0", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], + "warning": [] + }, + { + "query": "from a_index | stats median_absolute_deviation(booleanField)", + "error": [ + "Argument of [median_absolute_deviation] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(numberField, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats percentile(numberField, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(numberField, 5))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(numberField, 5))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(percentile(numberField, 5)) + percentile(numberField, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(percentile(numberField, 5)) + percentile(numberField, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats percentile(numberField, numberField)", + "error": [ + "Argument of [percentile] must be a constant, received [numberField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(numberField / 2, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(numberField / 2, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), percentile(numberField / 2, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = percentile(numberField / 2, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(numberField, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), percentile(numberField, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats percentile(numberField, 5) by round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = percentile(numberField, 5) by var1 = round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = percentile(avg(numberField), 5)", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(avg(numberField), 5)", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(stringField, 5)", + "error": [ + "Argument of [percentile] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | sort percentile(numberField, 5)", + "error": [ + "SORT does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(numberField, 5)", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | where percentile(numberField, 5) > 0", + "error": [ + "WHERE does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(numberField, 5)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = percentile(numberField, 5) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(numberField, 5)", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | eval percentile(numberField, 5) > 0", + "error": [ + "EVAL does not support function percentile" + ], + "warning": [] + }, + { + "query": "from a_index | stats percentile(booleanField, 5)", + "error": [ + "Argument of [percentile] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = max(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(numberField)) + max(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(numberField)) + max(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), max(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = max(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), max(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = max(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(numberField) by round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = max(numberField) by var1 = round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = max(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats max(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats max(stringField)", + "error": [ + "Argument of [max] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = max(*)", + "error": [ + "Using wildcards (*) in max is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = max(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats max(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(max(dateField)) + max(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(max(dateField)) + max(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort max(numberField)", + "error": [ + "SORT does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(numberField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(numberField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(dateField)", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | where max(dateField) > 0", + "error": [ + "WHERE does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(numberField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(numberField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(numberField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(numberField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(dateField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = max(dateField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(dateField)", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | eval max(dateField) > 0", + "error": [ + "EVAL does not support function max" + ], + "warning": [] + }, + { + "query": "from a_index | stats max(booleanField)", + "error": [ + "Argument of [max] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(numberField)) + min(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(numberField)) + min(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), min(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = min(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), min(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = min(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(numberField) by round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var0 = min(numberField) by var1 = round(numberField / 2)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), ipField", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), numberField / 2", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = min(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats min(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats min(stringField)", + "error": [ + "Argument of [min] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(*)", + "error": [ + "Using wildcards (*) in min is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = min(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats min(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(dateField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(min(dateField)) + min(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(min(dateField)) + min(dateField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort min(numberField)", + "error": [ + "SORT does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(numberField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(numberField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(dateField)", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | where min(dateField) > 0", + "error": [ + "WHERE does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(numberField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(numberField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(numberField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(numberField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(dateField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = min(dateField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(dateField)", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | eval min(dateField) > 0", + "error": [ + "EVAL does not support function min" + ], + "warning": [] + }, + { + "query": "from a_index | stats min(booleanField)", + "error": [ + "Argument of [min] must be [number], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = count(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats count(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(count(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(count(stringField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(count(stringField)) + count(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(count(stringField)) + count(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort count(stringField)", + "error": [ + "SORT does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | where count(stringField)", + "error": [ + "WHERE does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | where count(stringField) > 0", + "error": [ + "WHERE does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = count(stringField)", + "error": [ + "EVAL does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = count(stringField) > 0", + "error": [ + "EVAL does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | eval count(stringField)", + "error": [ + "EVAL does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | eval count(stringField) > 0", + "error": [ + "EVAL does not support function count" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = count_distinct(stringField, numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats count_distinct(stringField, numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(count_distinct(stringField, numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(count_distinct(stringField, numberField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort count_distinct(stringField, numberField)", + "error": [ + "SORT does not support function count_distinct" + ], + "warning": [] + }, + { + "query": "from a_index | where count_distinct(stringField, numberField)", + "error": [ + "WHERE does not support function count_distinct" + ], + "warning": [] + }, + { + "query": "from a_index | where count_distinct(stringField, numberField) > 0", + "error": [ + "WHERE does not support function count_distinct" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = count_distinct(stringField, numberField)", + "error": [ + "EVAL does not support function count_distinct" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = count_distinct(stringField, numberField) > 0", + "error": [ + "EVAL does not support function count_distinct" + ], + "warning": [] + }, + { + "query": "from a_index | eval count_distinct(stringField, numberField)", + "error": [ + "EVAL does not support function count_distinct" + ], + "warning": [] + }, + { + "query": "from a_index | eval count_distinct(stringField, numberField) > 0", + "error": [ + "EVAL does not support function count_distinct" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = st_centroid_agg(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(cartesianPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats var = st_centroid_agg(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(avg(numberField))", + "error": [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(stringField)", + "error": [ + "Argument of [st_centroid_agg] must be [cartesian_point], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = st_centroid_agg(*)", + "error": [ + "Using wildcards (*) in st_centroid_agg is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = st_centroid_agg(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(geoPointField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort st_centroid_agg(cartesianPointField)", + "error": [ + "SORT does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | where st_centroid_agg(cartesianPointField)", + "error": [ + "WHERE does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | where st_centroid_agg(cartesianPointField) > 0", + "error": [ + "WHERE does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | where st_centroid_agg(geoPointField)", + "error": [ + "WHERE does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | where st_centroid_agg(geoPointField) > 0", + "error": [ + "WHERE does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_centroid_agg(cartesianPointField)", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_centroid_agg(cartesianPointField) > 0", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_centroid_agg(cartesianPointField)", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_centroid_agg(cartesianPointField) > 0", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_centroid_agg(geoPointField)", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = st_centroid_agg(geoPointField) > 0", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_centroid_agg(geoPointField)", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | eval st_centroid_agg(geoPointField) > 0", + "error": [ + "EVAL does not support function st_centroid_agg" + ], + "warning": [] + }, + { + "query": "from a_index | stats st_centroid_agg(booleanField)", + "error": [ + "Argument of [st_centroid_agg] must be [cartesian_point], found value [booleanField] type [boolean]" + ], + "warning": [] + }, + { + "query": "from a_index | stats var = values(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats values(stringField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort values(stringField)", + "error": [ + "SORT does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | where values(stringField)", + "error": [ + "WHERE does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | where values(stringField) > 0", + "error": [ + "WHERE does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = values(stringField)", + "error": [ + "EVAL does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | eval var = values(stringField) > 0", + "error": [ + "EVAL does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | eval values(stringField)", + "error": [ + "EVAL does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | eval values(stringField) > 0", + "error": [ + "EVAL does not support function values" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, 1 year)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, 1 year)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(numberField, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(numberField, numberField)", + "error": [ + "Argument of [bucket] must be a constant, received [numberField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(numberField, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, 5, \"a\", \"a\")", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats by bucket(dateField, numberField, stringField, stringField)", + "error": [ + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [stringField]", + "Argument of [bucket] must be a constant, received [stringField]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, 5, \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count(stringField)) + count(stringField)", + "query": "from a_index | stats by bucket(dateField, 5, now(), now())", "error": [], "warning": [] }, { - "query": "from a_index | sort count(stringField)", + "query": "from a_index | stats by bucket(dateField, numberField, dateField, dateField)", "error": [ - "SORT does not support function count" + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [dateField]", + "Argument of [bucket] must be a constant, received [dateField]" ], "warning": [] }, { - "query": "from a_index | where count(stringField)", - "error": [ - "WHERE does not support function count" - ], + "query": "from a_index | stats by bin(dateField, 5, now(), now())", + "error": [], "warning": [] }, { - "query": "from a_index | where count(stringField) > 0", - "error": [ - "WHERE does not support function count" - ], + "query": "from a_index | stats by bucket(dateField, 5, \"a\", now())", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = count(stringField)", + "query": "from a_index | stats by bucket(dateField, numberField, stringField, dateField)", "error": [ - "EVAL does not support function count" + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [stringField]", + "Argument of [bucket] must be a constant, received [dateField]" ], "warning": [] }, { - "query": "from a_index | eval var = count(stringField) > 0", - "error": [ - "EVAL does not support function count" - ], + "query": "from a_index | stats by bin(dateField, 5, \"a\", now())", + "error": [], "warning": [] }, { - "query": "from a_index | eval count(stringField)", - "error": [ - "EVAL does not support function count" - ], + "query": "from a_index | stats by bucket(dateField, 5, now(), \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval count(stringField) > 0", + "query": "from a_index | stats by bucket(dateField, numberField, dateField, stringField)", "error": [ - "EVAL does not support function count" + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [dateField]", + "Argument of [bucket] must be a constant, received [stringField]" ], "warning": [] }, { - "query": "from a_index | stats var = count_distinct(stringField, numberField)", + "query": "from a_index | stats by bin(dateField, 5, now(), \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats count_distinct(stringField, numberField)", + "query": "from a_index | stats by bucket(numberField, 5, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count_distinct(stringField, numberField))", - "error": [], + "query": "from a_index | stats by bucket(numberField, numberField, numberField, numberField)", + "error": [ + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [numberField]", + "Argument of [bucket] must be a constant, received [numberField]" + ], "warning": [] }, { - "query": "from a_index | stats round(count_distinct(stringField, numberField))", + "query": "from a_index | stats by bin(numberField, 5, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)", - "error": [], + "query": "from a_index | sort bucket(dateField, 1 year)", + "error": [ + "SORT does not support function bucket" + ], "warning": [] }, { - "query": "from a_index | stats round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)", + "query": "row var = cbrt(5)", "error": [], "warning": [] }, { - "query": "from a_index | sort count_distinct(stringField, numberField)", - "error": [ - "SORT does not support function count_distinct" - ], - "warning": [] - }, - { - "query": "from a_index | where count_distinct(stringField, numberField)", - "error": [ - "WHERE does not support function count_distinct" - ], + "query": "row cbrt(5)", + "error": [], "warning": [] }, { - "query": "from a_index | where count_distinct(stringField, numberField) > 0", - "error": [ - "WHERE does not support function count_distinct" - ], + "query": "row var = cbrt(to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = count_distinct(stringField, numberField)", + "query": "row var = cbrt(true)", "error": [ - "EVAL does not support function count_distinct" + "Argument of [cbrt] must be [number], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = count_distinct(stringField, numberField) > 0", - "error": [ - "EVAL does not support function count_distinct" - ], + "query": "from a_index | where cbrt(numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval count_distinct(stringField, numberField)", + "query": "from a_index | where cbrt(booleanField) > 0", "error": [ - "EVAL does not support function count_distinct" + "Argument of [cbrt] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval count_distinct(stringField, numberField) > 0", - "error": [ - "EVAL does not support function count_distinct" - ], + "query": "from a_index | eval var = cbrt(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(cartesianPointField)", + "query": "from a_index | eval cbrt(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(cartesianPointField)", + "query": "from a_index | eval var = cbrt(to_integer(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(avg(numberField))", + "query": "from a_index | eval cbrt(booleanField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [cbrt] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(avg(numberField))", + "query": "from a_index | eval var = cbrt(*)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Using wildcards (*) in cbrt is not allowed" ], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(stringField)", + "query": "from a_index | eval cbrt(numberField, extraArg)", "error": [ - "Argument of [st_centroid_agg] must be [cartesian_point], found value [stringField] type [string]" + "Error: [cbrt] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(*)", - "error": [ - "Using wildcards (*) in st_centroid_agg is not allowed" - ], + "query": "from a_index | sort cbrt(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(geoPointField)", + "query": "row var = from_base64(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(geoPointField)", + "query": "row from_base64(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | sort st_centroid_agg(cartesianPointField)", - "error": [ - "SORT does not support function st_centroid_agg" - ], + "query": "row var = from_base64(to_string(true))", + "error": [], "warning": [] }, { - "query": "from a_index | where st_centroid_agg(cartesianPointField)", + "query": "row var = from_base64(true)", "error": [ - "WHERE does not support function st_centroid_agg" + "Argument of [from_base64] must be [string], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where st_centroid_agg(cartesianPointField) > 0", - "error": [ - "WHERE does not support function st_centroid_agg" - ], + "query": "from a_index | where length(from_base64(stringField)) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | where st_centroid_agg(geoPointField)", + "query": "from a_index | where length(from_base64(booleanField)) > 0", "error": [ - "WHERE does not support function st_centroid_agg" + "Argument of [from_base64] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where st_centroid_agg(geoPointField) > 0", - "error": [ - "WHERE does not support function st_centroid_agg" - ], + "query": "from a_index | eval var = from_base64(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(cartesianPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "from a_index | eval from_base64(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(cartesianPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "from a_index | eval var = from_base64(to_string(booleanField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(cartesianPointField)", + "query": "from a_index | eval from_base64(booleanField)", "error": [ - "EVAL does not support function st_centroid_agg" + "Argument of [from_base64] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(cartesianPointField) > 0", + "query": "from a_index | eval var = from_base64(*)", "error": [ - "EVAL does not support function st_centroid_agg" + "Using wildcards (*) in from_base64 is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(geoPointField)", + "query": "from a_index | eval from_base64(stringField, extraArg)", "error": [ - "EVAL does not support function st_centroid_agg" + "Error: [from_base64] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(geoPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "from a_index | sort from_base64(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(geoPointField)", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "row var = locate(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(geoPointField) > 0", - "error": [ - "EVAL does not support function st_centroid_agg" - ], + "query": "row locate(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = values(stringField)", + "query": "row var = locate(to_string(true), to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats values(stringField)", + "query": "row var = locate(\"a\", \"a\", 5)", "error": [], "warning": [] }, { - "query": "from a_index | sort values(stringField)", - "error": [ - "SORT does not support function values" - ], + "query": "row locate(\"a\", \"a\", 5)", + "error": [], "warning": [] }, { - "query": "from a_index | where values(stringField)", - "error": [ - "WHERE does not support function values" - ], + "query": "row var = locate(to_string(true), to_string(true), to_integer(true))", + "error": [], "warning": [] }, { - "query": "from a_index | where values(stringField) > 0", + "query": "row var = locate(true, true, true)", "error": [ - "WHERE does not support function values" + "Argument of [locate] must be [string], found value [true] type [boolean]", + "Argument of [locate] must be [string], found value [true] type [boolean]", + "Argument of [locate] must be [number], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval var = values(stringField)", - "error": [ - "EVAL does not support function values" - ], + "query": "from a_index | where locate(stringField, stringField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = values(stringField) > 0", + "query": "from a_index | where locate(booleanField, booleanField) > 0", "error": [ - "EVAL does not support function values" + "Argument of [locate] must be [string], found value [booleanField] type [boolean]", + "Argument of [locate] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | eval values(stringField)", - "error": [ - "EVAL does not support function values" - ], + "query": "from a_index | where locate(stringField, stringField, numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval values(stringField) > 0", + "query": "from a_index | where locate(booleanField, booleanField, booleanField) > 0", "error": [ - "EVAL does not support function values" + "Argument of [locate] must be [string], found value [booleanField] type [boolean]", + "Argument of [locate] must be [string], found value [booleanField] type [boolean]", + "Argument of [locate] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 1 year)", + "query": "from a_index | eval var = locate(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 1 year)", + "query": "from a_index | eval locate(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, 5)", + "query": "from a_index | eval var = locate(to_string(booleanField), to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, numberField)", + "query": "from a_index | eval locate(booleanField, booleanField)", "error": [ - "Argument of [bucket] must be a constant, received [numberField]" + "Argument of [locate] must be [string], found value [booleanField] type [boolean]", + "Argument of [locate] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats by bin(numberField, 5)", + "query": "from a_index | eval var = locate(stringField, stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, \"a\", \"a\")", + "query": "from a_index | eval locate(stringField, stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, numberField, stringField, stringField)", + "query": "from a_index | eval var = locate(to_string(booleanField), to_string(booleanField), to_integer(booleanField))", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval locate(booleanField, booleanField, booleanField)", "error": [ - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [stringField]", - "Argument of [bucket] must be a constant, received [stringField]" + "Argument of [locate] must be [string], found value [booleanField] type [boolean]", + "Argument of [locate] must be [string], found value [booleanField] type [boolean]", + "Argument of [locate] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, \"a\", \"a\")", - "error": [], + "query": "from a_index | eval locate(stringField, stringField, numberField, extraArg)", + "error": [ + "Error: [locate] function expects no more than 3 arguments, got 4." + ], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, now(), now())", + "query": "from a_index | sort locate(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, numberField, dateField, dateField)", - "error": [ - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [dateField]", - "Argument of [bucket] must be a constant, received [dateField]" - ], + "query": "row var = to_base64(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, now(), now())", + "query": "row to_base64(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, \"a\", now())", + "query": "row var = to_base64(to_string(true))", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, numberField, stringField, dateField)", + "query": "row var = to_base64(true)", "error": [ - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [stringField]", - "Argument of [bucket] must be a constant, received [dateField]" + "Argument of [to_base64] must be [string], found value [true] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, \"a\", now())", + "query": "from a_index | where length(to_base64(stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, now(), \"a\")", - "error": [], + "query": "from a_index | where length(to_base64(booleanField)) > 0", + "error": [ + "Argument of [to_base64] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, numberField, dateField, stringField)", - "error": [ - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [dateField]", - "Argument of [bucket] must be a constant, received [stringField]" - ], + "query": "from a_index | eval var = to_base64(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, now(), \"a\")", + "query": "from a_index | eval to_base64(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, 5, 5, 5)", + "query": "from a_index | eval var = to_base64(to_string(booleanField))", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, numberField, numberField, numberField)", + "query": "from a_index | eval to_base64(booleanField)", "error": [ - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [numberField]", - "Argument of [bucket] must be a constant, received [numberField]" + "Argument of [to_base64] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | stats by bin(numberField, 5, 5, 5)", - "error": [], + "query": "from a_index | eval var = to_base64(*)", + "error": [ + "Using wildcards (*) in to_base64 is not allowed" + ], "warning": [] }, { - "query": "from a_index | sort bucket(dateField, 1 year)", + "query": "from a_index | eval to_base64(stringField, extraArg)", "error": [ - "SORT does not support function bucket" + "Error: [to_base64] function expects exactly one argument, got 2." ], "warning": [] + }, + { + "query": "from a_index | sort to_base64(stringField)", + "error": [], + "warning": [] } ] } \ No newline at end of file diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/helpers.ts b/packages/kbn-esql-validation-autocomplete/src/validation/helpers.ts index 9abb3ea3dc2aa..1b75dcd965550 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/helpers.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/helpers.ts @@ -7,6 +7,7 @@ */ import type { ESQLAst, ESQLAstItem, ESQLMessage, ESQLSingleAstItem } from '@kbn/esql-ast'; +import { FunctionDefinition } from '../definitions/types'; import { getAllArrayTypes, getAllArrayValues } from '../shared/helpers'; import { getMessageFromId } from './errors'; import type { ESQLPolicy, ReferenceMaps } from './types'; @@ -38,6 +39,21 @@ export function buildQueryForFieldsForStringSources(queryString: string, ast: ES return customQuery; } +/** + * Returns the maximum and minimum number of parameters allowed by a function + * + * Used for too-many, too-few arguments validation + */ +export function getMaxMinNumberOfParams(definition: FunctionDefinition) { + let min = Infinity; + let max = 0; + definition.signatures.forEach(({ params, minParams }) => { + min = Math.min(min, params.filter(({ optional }) => !optional).length); + max = Math.max(max, minParams ? Infinity : params.length); + }); + return { min, max }; +} + /** * We only want to report one message when any number of the elements in an array argument is of the wrong type */ diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts index 01d0695af4a6c..c05e6e2f28787 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -9,9 +9,9 @@ import { join } from 'path'; import { writeFile, readFile } from 'fs/promises'; import { ignoreErrorsMap, validateQuery } from './validation'; -import { evalFunctionsDefinitions } from '../definitions/functions'; +import { evalFunctionDefinitions } from '../definitions/functions'; import { getFunctionSignatures } from '../definitions/helpers'; -import { FunctionDefinition } from '../definitions/types'; +import { FunctionDefinition, SupportedFieldType, supportedFieldTypes } from '../definitions/types'; import { chronoLiterals, timeLiterals } from '../definitions/literals'; import { statsAggregationFunctionDefinitions } from '../definitions/aggs'; import capitalize from 'lodash/capitalize'; @@ -21,20 +21,8 @@ import { nonNullable } from '../shared/helpers'; import { METADATA_FIELDS } from '../shared/constants'; import { FUNCTION_DESCRIBE_BLOCK_NAME } from './function_describe_block_name'; -const fieldTypes = [ - 'number', - 'date', - 'boolean', - 'version', - 'ip', - 'string', - 'cartesian_point', - 'cartesian_shape', - 'geo_point', - 'geo_shape', -]; const fields = [ - ...fieldTypes.map((type) => ({ name: `${camelCase(type)}Field`, type })), + ...supportedFieldTypes.map((type) => ({ name: `${camelCase(type)}Field`, type })), { name: 'any#Char$Field', type: 'number' }, { name: 'kubernetes.something.something', type: 'number' }, { name: '@timestamp', type: 'date' }, @@ -97,13 +85,13 @@ function getCallbackMocks() { }; } -const toInteger = evalFunctionsDefinitions.find(({ name }) => name === 'to_integer')!; -const toStringSignature = evalFunctionsDefinitions.find(({ name }) => name === 'to_string')!; -const toDateSignature = evalFunctionsDefinitions.find(({ name }) => name === 'to_datetime')!; -const toBooleanSignature = evalFunctionsDefinitions.find(({ name }) => name === 'to_boolean')!; -const toIpSignature = evalFunctionsDefinitions.find(({ name }) => name === 'to_ip')!; -const toGeoPointSignature = evalFunctionsDefinitions.find(({ name }) => name === 'to_geopoint')!; -const toCartesianPointSignature = evalFunctionsDefinitions.find( +const toInteger = evalFunctionDefinitions.find(({ name }) => name === 'to_integer')!; +const toStringSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_string')!; +const toDateSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_datetime')!; +const toBooleanSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_boolean')!; +const toIpSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_ip')!; +const toGeoPointSignature = evalFunctionDefinitions.find(({ name }) => name === 'to_geopoint')!; +const toCartesianPointSignature = evalFunctionDefinitions.find( ({ name }) => name === 'to_cartesianpoint' )!; @@ -129,6 +117,9 @@ function getLiteralType(typeString: 'chrono_literal' | 'time_literal') { } return `1 ${literals[typeString]}`; } + +export const fieldNameFromType = (type: SupportedFieldType) => `${camelCase(type)}Field`; + function getFieldName( typeString: string, { useNestedFunction, isStats }: { useNestedFunction: boolean; isStats: boolean } @@ -179,7 +170,7 @@ function getFieldMapping( }; return params.map(({ name: _name, type, constantOnly, literalOptions, ...rest }) => { const typeString: string = type; - if (fieldTypes.includes(typeString)) { + if (supportedFieldTypes.includes(typeString as SupportedFieldType)) { if (useLiterals && literalOptions) { return { name: `"${literalOptions[0]}"`, @@ -1024,15 +1015,15 @@ describe('validation logic', () => { [] ); - for (const field of fieldTypes) { - testErrorsAndWarnings(`from a_index | where ${camelCase(field)}Field IS NULL`, []); - testErrorsAndWarnings(`from a_index | where ${camelCase(field)}Field IS null`, []); - testErrorsAndWarnings(`from a_index | where ${camelCase(field)}Field is null`, []); - testErrorsAndWarnings(`from a_index | where ${camelCase(field)}Field is NULL`, []); - testErrorsAndWarnings(`from a_index | where ${camelCase(field)}Field IS NOT NULL`, []); - testErrorsAndWarnings(`from a_index | where ${camelCase(field)}Field IS NOT null`, []); - testErrorsAndWarnings(`from a_index | where ${camelCase(field)}Field IS not NULL`, []); - testErrorsAndWarnings(`from a_index | where ${camelCase(field)}Field Is nOt NuLL`, []); + for (const field of supportedFieldTypes) { + testErrorsAndWarnings(`from a_index | where ${fieldNameFromType(field)} IS NULL`, []); + testErrorsAndWarnings(`from a_index | where ${fieldNameFromType(field)} IS null`, []); + testErrorsAndWarnings(`from a_index | where ${fieldNameFromType(field)} is null`, []); + testErrorsAndWarnings(`from a_index | where ${fieldNameFromType(field)} is NULL`, []); + testErrorsAndWarnings(`from a_index | where ${fieldNameFromType(field)} IS NOT NULL`, []); + testErrorsAndWarnings(`from a_index | where ${fieldNameFromType(field)} IS NOT null`, []); + testErrorsAndWarnings(`from a_index | where ${fieldNameFromType(field)} IS not NULL`, []); + testErrorsAndWarnings(`from a_index | where ${fieldNameFromType(field)} Is nOt NuLL`, []); } // this is a scenario that was failing because "or" didn't accept "null" @@ -1087,14 +1078,14 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval a=["a", "b"]', []); testErrorsAndWarnings('from a_index | eval a=null', []); - for (const field of fieldTypes) { - testErrorsAndWarnings(`from a_index | eval ${camelCase(field)}Field IS NULL`, []); - testErrorsAndWarnings(`from a_index | eval ${camelCase(field)}Field IS null`, []); - testErrorsAndWarnings(`from a_index | eval ${camelCase(field)}Field is null`, []); - testErrorsAndWarnings(`from a_index | eval ${camelCase(field)}Field is NULL`, []); - testErrorsAndWarnings(`from a_index | eval ${camelCase(field)}Field IS NOT NULL`, []); - testErrorsAndWarnings(`from a_index | eval ${camelCase(field)}Field IS NOT null`, []); - testErrorsAndWarnings(`from a_index | eval ${camelCase(field)}Field IS not NULL`, []); + for (const field of supportedFieldTypes) { + testErrorsAndWarnings(`from a_index | eval ${fieldNameFromType(field)} IS NULL`, []); + testErrorsAndWarnings(`from a_index | eval ${fieldNameFromType(field)} IS null`, []); + testErrorsAndWarnings(`from a_index | eval ${fieldNameFromType(field)} is null`, []); + testErrorsAndWarnings(`from a_index | eval ${fieldNameFromType(field)} is NULL`, []); + testErrorsAndWarnings(`from a_index | eval ${fieldNameFromType(field)} IS NOT NULL`, []); + testErrorsAndWarnings(`from a_index | eval ${fieldNameFromType(field)} IS NOT null`, []); + testErrorsAndWarnings(`from a_index | eval ${fieldNameFromType(field)} IS not NULL`, []); } for (const nesting of NESTED_DEPTHS) { @@ -2060,6 +2051,20 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | sort date_diff("year", dateField, dateField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = date_diff("year", to_datetime(dateField), to_datetime(dateField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval date_diff(booleanField, booleanField, booleanField)', + [ + 'Argument of [date_diff] must be [string], found value [booleanField] type [boolean]', + 'Argument of [date_diff] must be [date], found value [booleanField] type [boolean]', + 'Argument of [date_diff] must be [date], found value [booleanField] type [boolean]', + ] + ); }); describe('abs', () => { @@ -2094,6 +2099,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort abs(numberField)', []); + testErrorsAndWarnings('row var = abs(to_integer(true))', []); + + testErrorsAndWarnings('row var = abs(true)', [ + 'Argument of [abs] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where abs(booleanField) > 0', [ + 'Argument of [abs] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = abs(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval abs(booleanField)', [ + 'Argument of [abs] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('acos', () => { @@ -2128,6 +2148,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort acos(numberField)', []); + testErrorsAndWarnings('row var = acos(to_integer(true))', []); + + testErrorsAndWarnings('row var = acos(true)', [ + 'Argument of [acos] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where acos(booleanField) > 0', [ + 'Argument of [acos] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = acos(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval acos(booleanField)', [ + 'Argument of [acos] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('asin', () => { @@ -2162,6 +2197,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort asin(numberField)', []); + testErrorsAndWarnings('row var = asin(to_integer(true))', []); + + testErrorsAndWarnings('row var = asin(true)', [ + 'Argument of [asin] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where asin(booleanField) > 0', [ + 'Argument of [asin] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = asin(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval asin(booleanField)', [ + 'Argument of [asin] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('atan', () => { @@ -2196,6 +2246,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort atan(numberField)', []); + testErrorsAndWarnings('row var = atan(to_integer(true))', []); + + testErrorsAndWarnings('row var = atan(true)', [ + 'Argument of [atan] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where atan(booleanField) > 0', [ + 'Argument of [atan] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = atan(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval atan(booleanField)', [ + 'Argument of [atan] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('atan2', () => { @@ -2233,6 +2298,27 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort atan2(numberField, numberField)', []); + testErrorsAndWarnings('row var = atan2(to_integer(true), to_integer(true))', []); + + testErrorsAndWarnings('row var = atan2(true, true)', [ + 'Argument of [atan2] must be [number], found value [true] type [boolean]', + 'Argument of [atan2] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where atan2(booleanField, booleanField) > 0', [ + 'Argument of [atan2] must be [number], found value [booleanField] type [boolean]', + 'Argument of [atan2] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval atan2(booleanField, booleanField)', [ + 'Argument of [atan2] must be [number], found value [booleanField] type [boolean]', + 'Argument of [atan2] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('case', () => { @@ -2241,6 +2327,10 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval var = case(booleanField, stringField)', []); testErrorsAndWarnings('from a_index | eval case(booleanField, stringField)', []); testErrorsAndWarnings('from a_index | sort case(booleanField, stringField)', []); + + testErrorsAndWarnings('row var = case(to_cartesianpoint("POINT (30 10)"), true)', [ + 'Argument of [case] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); }); describe('ceil', () => { @@ -2275,6 +2365,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort ceil(numberField)', []); + testErrorsAndWarnings('row var = ceil(to_integer(true))', []); + + testErrorsAndWarnings('row var = ceil(true)', [ + 'Argument of [ceil] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where ceil(booleanField) > 0', [ + 'Argument of [ceil] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = ceil(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval ceil(booleanField)', [ + 'Argument of [ceil] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('cidr_match', () => { @@ -2301,6 +2406,25 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort cidr_match(ipField, stringField)', []); + testErrorsAndWarnings( + 'row var = cidr_match(to_ip(to_ip("127.0.0.1")), to_string(true))', + [] + ); + + testErrorsAndWarnings('row var = cidr_match(true, true)', [ + 'Argument of [cidr_match] must be [ip], found value [true] type [boolean]', + 'Argument of [cidr_match] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = cidr_match(to_ip(ipField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval cidr_match(booleanField, booleanField)', [ + 'Argument of [cidr_match] must be [ip], found value [booleanField] type [boolean]', + 'Argument of [cidr_match] must be [string], found value [booleanField] type [boolean]', + ]); }); describe('coalesce', () => { @@ -2309,6 +2433,277 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval var = coalesce(stringField)', []); testErrorsAndWarnings('from a_index | eval coalesce(stringField)', []); testErrorsAndWarnings('from a_index | sort coalesce(stringField)', []); + testErrorsAndWarnings('row var = coalesce(true)', []); + testErrorsAndWarnings('row coalesce(true)', []); + testErrorsAndWarnings('row var = coalesce(to_boolean(true))', []); + testErrorsAndWarnings('row var = coalesce(true, true)', []); + testErrorsAndWarnings('row coalesce(true, true)', []); + testErrorsAndWarnings('row var = coalesce(to_boolean(true), to_boolean(true))', []); + testErrorsAndWarnings('row var = coalesce(5)', []); + testErrorsAndWarnings('row coalesce(5)', []); + testErrorsAndWarnings('row var = coalesce(to_integer(true))', []); + testErrorsAndWarnings('row var = coalesce(5, 5)', []); + testErrorsAndWarnings('row coalesce(5, 5)', []); + testErrorsAndWarnings('row var = coalesce(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = coalesce(to_string(true))', []); + testErrorsAndWarnings('row var = coalesce("a", "a")', []); + testErrorsAndWarnings('row coalesce("a", "a")', []); + testErrorsAndWarnings('row var = coalesce(to_string(true), to_string(true))', []); + + testErrorsAndWarnings('from a_index | where coalesce(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where coalesce(numberField, numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where length(coalesce(stringField)) > 0', []); + + testErrorsAndWarnings( + 'from a_index | where length(coalesce(stringField, stringField)) > 0', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = coalesce(booleanField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval var = coalesce(booleanField, booleanField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(booleanField, booleanField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_boolean(booleanField), to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = coalesce(numberField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(numberField, numberField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = coalesce(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(stringField, stringField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | sort coalesce(booleanField)', []); + testErrorsAndWarnings('row var = coalesce(5, true)', []); + testErrorsAndWarnings('row coalesce(5, true)', []); + testErrorsAndWarnings('row var = coalesce(to_integer(true), to_boolean(true))', []); + testErrorsAndWarnings('row var = coalesce(now())', []); + testErrorsAndWarnings('row coalesce(now())', []); + testErrorsAndWarnings('row var = coalesce(to_datetime(now()))', []); + testErrorsAndWarnings('row var = coalesce(now(), true)', []); + testErrorsAndWarnings('row coalesce(now(), true)', []); + testErrorsAndWarnings('row var = coalesce(to_datetime(now()), to_boolean(true))', []); + testErrorsAndWarnings('row var = coalesce("a", true)', []); + testErrorsAndWarnings('row coalesce("a", true)', []); + testErrorsAndWarnings('row var = coalesce(to_string(true), to_boolean(true))', []); + testErrorsAndWarnings('row var = coalesce(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row coalesce(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = coalesce(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = coalesce(to_ip("127.0.0.1"), true)', []); + testErrorsAndWarnings('row coalesce(to_ip("127.0.0.1"), true)', []); + testErrorsAndWarnings( + 'row var = coalesce(to_ip(to_ip("127.0.0.1")), to_boolean(true))', + [] + ); + testErrorsAndWarnings('row var = coalesce(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row coalesce(to_cartesianpoint("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = coalesce(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = coalesce(to_cartesianpoint("POINT (30 10)"), true)', []); + testErrorsAndWarnings('row coalesce(to_cartesianpoint("POINT (30 10)"), true)', []); + + testErrorsAndWarnings( + 'row var = coalesce(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_boolean(true))', + [] + ); + + testErrorsAndWarnings('row var = coalesce(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row coalesce(to_cartesianshape("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = coalesce(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = coalesce(to_cartesianshape("POINT (30 10)"), true)', []); + testErrorsAndWarnings('row coalesce(to_cartesianshape("POINT (30 10)"), true)', []); + + testErrorsAndWarnings( + 'row var = coalesce(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_boolean(true))', + [] + ); + + testErrorsAndWarnings('row var = coalesce(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row coalesce(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = coalesce(to_geopoint(to_geopoint("POINT (30 10)")))', []); + testErrorsAndWarnings('row var = coalesce(to_geopoint("POINT (30 10)"), true)', []); + testErrorsAndWarnings('row coalesce(to_geopoint("POINT (30 10)"), true)', []); + + testErrorsAndWarnings( + 'row var = coalesce(to_geopoint(to_geopoint("POINT (30 10)")), to_boolean(true))', + [] + ); + + testErrorsAndWarnings('row var = coalesce(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row coalesce(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = coalesce(to_geoshape(to_geopoint("POINT (30 10)")))', []); + testErrorsAndWarnings('row var = coalesce(to_geoshape("POINT (30 10)"), true)', []); + testErrorsAndWarnings('row coalesce(to_geoshape("POINT (30 10)"), true)', []); + + testErrorsAndWarnings( + 'row var = coalesce(to_geoshape(to_geopoint("POINT (30 10)")), to_boolean(true))', + [] + ); + + testErrorsAndWarnings('row var = coalesce(to_version("1.0.0"))', []); + testErrorsAndWarnings('row coalesce(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = coalesce(to_version("a"))', []); + testErrorsAndWarnings('row var = coalesce(to_version("1.0.0"), true)', []); + testErrorsAndWarnings('row coalesce(to_version("1.0.0"), true)', []); + testErrorsAndWarnings('row var = coalesce(to_version("a"), to_boolean(true))', []); + testErrorsAndWarnings('from a_index | where coalesce(numberField, booleanField) > 0', []); + testErrorsAndWarnings( + 'from a_index | where length(coalesce(stringField, booleanField)) > 0', + [] + ); + testErrorsAndWarnings('from a_index | eval var = coalesce(numberField, booleanField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(numberField, booleanField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_integer(booleanField), to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = coalesce(dateField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(dateField, booleanField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(dateField, booleanField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_datetime(dateField), to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = coalesce(stringField, booleanField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(stringField, booleanField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_string(booleanField), to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = coalesce(ipField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(ipField, booleanField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(ipField, booleanField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_ip(ipField), to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = coalesce(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(cartesianPointField, booleanField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval coalesce(cartesianPointField, booleanField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_cartesianpoint(cartesianPointField), to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = coalesce(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(cartesianShapeField, booleanField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval coalesce(cartesianShapeField, booleanField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_cartesianshape(cartesianPointField), to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = coalesce(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(to_geopoint(geoPointField))', []); + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(geoPointField, booleanField)', + [] + ); + testErrorsAndWarnings('from a_index | eval coalesce(geoPointField, booleanField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_geopoint(geoPointField), to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = coalesce(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(to_geoshape(geoPointField))', []); + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(geoShapeField, booleanField)', + [] + ); + testErrorsAndWarnings('from a_index | eval coalesce(geoShapeField, booleanField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_geoshape(geoPointField), to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = coalesce(versionField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(to_version(stringField))', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(versionField, booleanField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(versionField, booleanField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = coalesce(to_version(stringField), to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | sort coalesce(numberField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(cartesianPointField)', []); }); describe('concat', () => { @@ -2318,6 +2713,7 @@ describe('validation logic', () => { testErrorsAndWarnings('row var = concat(5, 5)', [ 'Argument of [concat] must be [string], found value [5] type [number]', + 'Argument of [concat] must be [string], found value [5] type [number]', ]); testErrorsAndWarnings( @@ -2327,6 +2723,7 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | where length(concat(numberField, numberField)) > 0', [ 'Argument of [concat] must be [string], found value [numberField] type [number]', + 'Argument of [concat] must be [string], found value [numberField] type [number]', ]); testErrorsAndWarnings('from a_index | eval var = concat(stringField, stringField)', []); @@ -2339,9 +2736,34 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval concat(numberField, numberField)', [ 'Argument of [concat] must be [string], found value [numberField] type [number]', + 'Argument of [concat] must be [string], found value [numberField] type [number]', ]); testErrorsAndWarnings('from a_index | sort concat(stringField, stringField)', []); + testErrorsAndWarnings('row var = concat(to_string(true), to_string(true))', []); + + testErrorsAndWarnings('row var = concat(true, true)', [ + 'Argument of [concat] must be [string], found value [true] type [boolean]', + 'Argument of [concat] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(concat(booleanField, booleanField)) > 0', + [ + 'Argument of [concat] must be [string], found value [booleanField] type [boolean]', + 'Argument of [concat] must be [string], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = concat(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval concat(booleanField, booleanField)', [ + 'Argument of [concat] must be [string], found value [booleanField] type [boolean]', + 'Argument of [concat] must be [string], found value [booleanField] type [boolean]', + ]); }); describe('cos', () => { @@ -2376,6 +2798,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort cos(numberField)', []); + testErrorsAndWarnings('row var = cos(to_integer(true))', []); + + testErrorsAndWarnings('row var = cos(true)', [ + 'Argument of [cos] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where cos(booleanField) > 0', [ + 'Argument of [cos] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = cos(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval cos(booleanField)', [ + 'Argument of [cos] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('cosh', () => { @@ -2410,6 +2847,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort cosh(numberField)', []); + testErrorsAndWarnings('row var = cosh(to_integer(true))', []); + + testErrorsAndWarnings('row var = cosh(true)', [ + 'Argument of [cosh] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where cosh(booleanField) > 0', [ + 'Argument of [cosh] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = cosh(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval cosh(booleanField)', [ + 'Argument of [cosh] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('date_extract', () => { @@ -2445,33 +2897,63 @@ describe('validation logic', () => { 'from a_index | sort date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', [] ); + + testErrorsAndWarnings('row var = date_extract(true, true)', [ + 'Argument of [date_extract] must be [chrono_literal], found value [true] type [boolean]', + 'Argument of [date_extract] must be [date], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", to_datetime(dateField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval date_extract(booleanField, booleanField)', [ + 'Argument of [date_extract] must be [chrono_literal], found value [booleanField] type [boolean]', + 'Argument of [date_extract] must be [date], found value [booleanField] type [boolean]', + ]); }); describe('date_format', () => { - testErrorsAndWarnings('row var = date_format(now(), "a")', []); - testErrorsAndWarnings('row date_format(now(), "a")', []); - testErrorsAndWarnings('from a_index | eval var = date_format(dateField, stringField)', []); - testErrorsAndWarnings('from a_index | eval date_format(dateField, stringField)', []); + testErrorsAndWarnings('row var = date_format("a", now())', []); + testErrorsAndWarnings('row date_format("a", now())', []); + testErrorsAndWarnings('from a_index | eval var = date_format(stringField, dateField)', []); + testErrorsAndWarnings('from a_index | eval date_format(stringField, dateField)', []); testErrorsAndWarnings( - 'from a_index | eval var = date_format(to_datetime(stringField), to_string(stringField))', + 'from a_index | eval var = date_format(to_string(stringField), to_datetime(stringField))', [] ); testErrorsAndWarnings('from a_index | eval date_format(stringField, numberField)', [ - 'Argument of [date_format] must be [date], found value [stringField] type [string]', - 'Argument of [date_format] must be [string], found value [numberField] type [number]', + 'Argument of [date_format] must be [date], found value [numberField] type [number]', ]); - testErrorsAndWarnings('from a_index | eval date_format(dateField, stringField, extraArg)', [ + testErrorsAndWarnings('from a_index | eval date_format(stringField, dateField, extraArg)', [ 'Error: [date_format] function expects no more than 2 arguments, got 3.', ]); - testErrorsAndWarnings('from a_index | sort date_format(dateField, stringField)', []); + testErrorsAndWarnings('from a_index | sort date_format(stringField, dateField)', []); + + testErrorsAndWarnings('row var = date_format(true, true)', [ + 'Argument of [date_format] must be [string], found value [true] type [boolean]', + 'Argument of [date_format] must be [date], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = date_format(to_string(booleanField), to_datetime(dateField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval date_format(booleanField, booleanField)', [ + 'Argument of [date_format] must be [string], found value [booleanField] type [boolean]', + 'Argument of [date_format] must be [date], found value [booleanField] type [boolean]', + ]); }); describe('date_parse', () => { testErrorsAndWarnings('row var = date_parse("a", "a")', []); + testErrorsAndWarnings('row var = date_parse("a")', []); testErrorsAndWarnings('row date_parse("a", "a")', []); testErrorsAndWarnings('row var = date_parse(to_string("a"), to_string("a"))', []); @@ -2480,6 +2962,7 @@ describe('validation logic', () => { 'Argument of [date_parse] must be [string], found value [5] type [number]', ]); + testErrorsAndWarnings('from a_index | eval var = date_parse(stringField)', []); testErrorsAndWarnings('from a_index | eval var = date_parse(stringField, stringField)', []); testErrorsAndWarnings('from a_index | eval date_parse(stringField, stringField)', []); @@ -2495,16 +2978,32 @@ describe('validation logic', () => { testErrorsAndWarnings( 'from a_index | eval date_parse(stringField, stringField, extraArg)', - ['Error: [date_parse] function expects exactly 2 arguments, got 3.'] + ['Error: [date_parse] function expects no more than 2 arguments, got 3.'] ); testErrorsAndWarnings('from a_index | sort date_parse(stringField, stringField)', []); - }); + testErrorsAndWarnings('row var = date_parse(to_string(true), to_string(true))', []); - describe('date_trunc', () => { - testErrorsAndWarnings('row var = date_trunc(1 year, now())', []); - testErrorsAndWarnings('row date_trunc(1 year, now())', []); - testErrorsAndWarnings('from a_index | eval var = date_trunc(1 year, dateField)', []); + testErrorsAndWarnings('row var = date_parse(true, true)', [ + 'Argument of [date_parse] must be [string], found value [true] type [boolean]', + 'Argument of [date_parse] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = date_parse(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval date_parse(booleanField, booleanField)', [ + 'Argument of [date_parse] must be [string], found value [booleanField] type [boolean]', + 'Argument of [date_parse] must be [string], found value [booleanField] type [boolean]', + ]); + }); + + describe('date_trunc', () => { + testErrorsAndWarnings('row var = date_trunc(1 year, now())', []); + testErrorsAndWarnings('row date_trunc(1 year, now())', []); + testErrorsAndWarnings('from a_index | eval var = date_trunc(1 year, dateField)', []); testErrorsAndWarnings('from a_index | eval date_trunc(1 year, dateField)', []); testErrorsAndWarnings( @@ -2522,6 +3021,31 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort date_trunc(1 year, dateField)', []); + testErrorsAndWarnings('row var = date_trunc(now(), now())', []); + testErrorsAndWarnings('row date_trunc(now(), now())', []); + + testErrorsAndWarnings('row var = date_trunc(true, true)', [ + 'Argument of [date_trunc] must be [time_literal], found value [true] type [boolean]', + 'Argument of [date_trunc] must be [date], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = date_trunc(1 year, to_datetime(dateField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval date_trunc(booleanField, booleanField)', [ + 'Argument of [date_trunc] must be [time_literal], found value [booleanField] type [boolean]', + 'Argument of [date_trunc] must be [date], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = date_trunc(dateField, dateField)', []); + testErrorsAndWarnings('from a_index | eval date_trunc(dateField, dateField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = date_trunc(to_datetime(dateField), to_datetime(dateField))', + [] + ); }); describe('e', () => { @@ -2566,6 +3090,22 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort ends_with(stringField, stringField)', []); + testErrorsAndWarnings('row var = ends_with(to_string(true), to_string(true))', []); + + testErrorsAndWarnings('row var = ends_with(true, true)', [ + 'Argument of [ends_with] must be [string], found value [true] type [boolean]', + 'Argument of [ends_with] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = ends_with(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval ends_with(booleanField, booleanField)', [ + 'Argument of [ends_with] must be [string], found value [booleanField] type [boolean]', + 'Argument of [ends_with] must be [string], found value [booleanField] type [boolean]', + ]); }); describe('floor', () => { @@ -2600,6 +3140,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort floor(numberField)', []); + testErrorsAndWarnings('row var = floor(to_integer(true))', []); + + testErrorsAndWarnings('row var = floor(true)', [ + 'Argument of [floor] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where floor(booleanField) > 0', [ + 'Argument of [floor] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = floor(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval floor(booleanField)', [ + 'Argument of [floor] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('greatest', () => { @@ -2608,6 +3163,136 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval var = greatest(stringField)', []); testErrorsAndWarnings('from a_index | eval greatest(stringField)', []); testErrorsAndWarnings('from a_index | sort greatest(stringField)', []); + testErrorsAndWarnings('row var = greatest(true)', []); + testErrorsAndWarnings('row greatest(true)', []); + testErrorsAndWarnings('row var = greatest(to_boolean(true))', []); + testErrorsAndWarnings('row var = greatest(true, true)', []); + testErrorsAndWarnings('row greatest(true, true)', []); + testErrorsAndWarnings('row var = greatest(to_boolean(true), to_boolean(true))', []); + testErrorsAndWarnings('row var = greatest(5, 5)', []); + testErrorsAndWarnings('row greatest(5, 5)', []); + testErrorsAndWarnings('row var = greatest(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = greatest(5)', []); + testErrorsAndWarnings('row greatest(5)', []); + testErrorsAndWarnings('row var = greatest(to_integer(true))', []); + testErrorsAndWarnings('row var = greatest(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row greatest(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); + + testErrorsAndWarnings( + 'row var = greatest(to_ip(to_ip("127.0.0.1")), to_ip(to_ip("127.0.0.1")))', + [] + ); + + testErrorsAndWarnings('row var = greatest(to_string(true))', []); + testErrorsAndWarnings('row var = greatest("a", "a")', []); + testErrorsAndWarnings('row greatest("a", "a")', []); + testErrorsAndWarnings('row var = greatest(to_string(true), to_string(true))', []); + testErrorsAndWarnings('row var = greatest(to_version("1.0.0"), to_version("1.0.0"))', []); + testErrorsAndWarnings('row greatest(to_version("1.0.0"), to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = greatest(to_version("a"), to_version("a"))', []); + + testErrorsAndWarnings( + 'row var = greatest(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [ + 'Argument of [greatest] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + 'Argument of [greatest] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ] + ); + + testErrorsAndWarnings('from a_index | where greatest(numberField, numberField) > 0', []); + + testErrorsAndWarnings( + 'from a_index | where greatest(cartesianPointField, cartesianPointField) > 0', + [ + 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ] + ); + + testErrorsAndWarnings('from a_index | where greatest(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where greatest(cartesianPointField) > 0', [ + 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where length(greatest(stringField)) > 0', []); + + testErrorsAndWarnings('from a_index | where length(greatest(cartesianPointField)) > 0', [ + 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(greatest(stringField, stringField)) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where length(greatest(cartesianPointField, cartesianPointField)) > 0', + [ + 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ] + ); + + testErrorsAndWarnings('from a_index | eval var = greatest(booleanField)', []); + testErrorsAndWarnings('from a_index | eval greatest(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval greatest(cartesianPointField)', [ + 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = greatest(booleanField, booleanField)', []); + testErrorsAndWarnings('from a_index | eval greatest(booleanField, booleanField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = greatest(to_boolean(booleanField), to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval greatest(cartesianPointField, cartesianPointField)', + [ + 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + 'Argument of [greatest] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ] + ); + + testErrorsAndWarnings('from a_index | eval var = greatest(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval greatest(numberField, numberField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = greatest(to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = greatest(numberField)', []); + testErrorsAndWarnings('from a_index | eval greatest(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = greatest(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = greatest(ipField, ipField)', []); + testErrorsAndWarnings('from a_index | eval greatest(ipField, ipField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = greatest(to_ip(ipField), to_ip(ipField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = greatest(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = greatest(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval greatest(stringField, stringField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = greatest(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = greatest(versionField, versionField)', []); + testErrorsAndWarnings('from a_index | eval greatest(versionField, versionField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = greatest(to_version(stringField), to_version(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | sort greatest(booleanField)', []); }); describe('least', () => { @@ -2616,6 +3301,136 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval var = least(stringField)', []); testErrorsAndWarnings('from a_index | eval least(stringField)', []); testErrorsAndWarnings('from a_index | sort least(stringField)', []); + testErrorsAndWarnings('row var = least(true)', []); + testErrorsAndWarnings('row least(true)', []); + testErrorsAndWarnings('row var = least(to_boolean(true))', []); + testErrorsAndWarnings('row var = least(true, true)', []); + testErrorsAndWarnings('row least(true, true)', []); + testErrorsAndWarnings('row var = least(to_boolean(true), to_boolean(true))', []); + testErrorsAndWarnings('row var = least(5, 5)', []); + testErrorsAndWarnings('row least(5, 5)', []); + testErrorsAndWarnings('row var = least(to_integer(true), to_integer(true))', []); + testErrorsAndWarnings('row var = least(5)', []); + testErrorsAndWarnings('row least(5)', []); + testErrorsAndWarnings('row var = least(to_integer(true))', []); + testErrorsAndWarnings('row var = least(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row least(to_ip("127.0.0.1"), to_ip("127.0.0.1"))', []); + + testErrorsAndWarnings( + 'row var = least(to_ip(to_ip("127.0.0.1")), to_ip(to_ip("127.0.0.1")))', + [] + ); + + testErrorsAndWarnings('row var = least(to_string(true))', []); + testErrorsAndWarnings('row var = least("a", "a")', []); + testErrorsAndWarnings('row least("a", "a")', []); + testErrorsAndWarnings('row var = least(to_string(true), to_string(true))', []); + testErrorsAndWarnings('row var = least(to_version("1.0.0"), to_version("1.0.0"))', []); + testErrorsAndWarnings('row least(to_version("1.0.0"), to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = least(to_version("a"), to_version("a"))', []); + + testErrorsAndWarnings( + 'row var = least(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [ + 'Argument of [least] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + 'Argument of [least] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ] + ); + + testErrorsAndWarnings('from a_index | where least(numberField, numberField) > 0', []); + + testErrorsAndWarnings( + 'from a_index | where least(cartesianPointField, cartesianPointField) > 0', + [ + 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ] + ); + + testErrorsAndWarnings('from a_index | where least(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where least(cartesianPointField) > 0', [ + 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where length(least(stringField)) > 0', []); + + testErrorsAndWarnings('from a_index | where length(least(cartesianPointField)) > 0', [ + 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(least(stringField, stringField)) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where length(least(cartesianPointField, cartesianPointField)) > 0', + [ + 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ] + ); + + testErrorsAndWarnings('from a_index | eval var = least(booleanField)', []); + testErrorsAndWarnings('from a_index | eval least(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = least(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval least(cartesianPointField)', [ + 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = least(booleanField, booleanField)', []); + testErrorsAndWarnings('from a_index | eval least(booleanField, booleanField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = least(to_boolean(booleanField), to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval least(cartesianPointField, cartesianPointField)', + [ + 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + 'Argument of [least] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ] + ); + + testErrorsAndWarnings('from a_index | eval var = least(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval least(numberField, numberField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = least(to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = least(numberField)', []); + testErrorsAndWarnings('from a_index | eval least(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = least(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = least(ipField, ipField)', []); + testErrorsAndWarnings('from a_index | eval least(ipField, ipField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = least(to_ip(ipField), to_ip(ipField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = least(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = least(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval least(stringField, stringField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = least(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = least(versionField, versionField)', []); + testErrorsAndWarnings('from a_index | eval least(versionField, versionField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = least(to_version(stringField), to_version(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | sort least(booleanField)', []); }); describe('left', () => { @@ -2656,6 +3471,27 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort left(stringField, numberField)', []); + testErrorsAndWarnings('row var = left(to_string(true), to_integer(true))', []); + + testErrorsAndWarnings('row var = left(true, true)', [ + 'Argument of [left] must be [string], found value [true] type [boolean]', + 'Argument of [left] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where length(left(booleanField, booleanField)) > 0', [ + 'Argument of [left] must be [string], found value [booleanField] type [boolean]', + 'Argument of [left] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = left(to_string(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval left(booleanField, booleanField)', [ + 'Argument of [left] must be [string], found value [booleanField] type [boolean]', + 'Argument of [left] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('length', () => { @@ -2690,6 +3526,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort length(stringField)', []); + testErrorsAndWarnings('row var = length(to_string(true))', []); + + testErrorsAndWarnings('row var = length(true)', [ + 'Argument of [length] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where length(booleanField) > 0', [ + 'Argument of [length] must be [string], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = length(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval length(booleanField)', [ + 'Argument of [length] must be [string], found value [booleanField] type [boolean]', + ]); }); describe('log', () => { @@ -2727,6 +3578,50 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort log(numberField, numberField)', []); + testErrorsAndWarnings('row var = log(5)', []); + testErrorsAndWarnings('row log(5)', []); + testErrorsAndWarnings('row var = log(to_integer(true))', []); + testErrorsAndWarnings('row var = log(to_integer(true), to_integer(true))', []); + + testErrorsAndWarnings('row var = log(true, true)', [ + 'Argument of [log] must be [number], found value [true] type [boolean]', + 'Argument of [log] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where log(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where log(booleanField) > 0', [ + 'Argument of [log] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where log(booleanField, booleanField) > 0', [ + 'Argument of [log] must be [number], found value [booleanField] type [boolean]', + 'Argument of [log] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = log(numberField)', []); + testErrorsAndWarnings('from a_index | eval log(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = log(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval log(booleanField)', [ + 'Argument of [log] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = log(*)', [ + 'Using wildcards (*) in log is not allowed', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = log(to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval log(booleanField, booleanField)', [ + 'Argument of [log] must be [number], found value [booleanField] type [boolean]', + 'Argument of [log] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | sort log(numberField)', []); }); describe('log10', () => { @@ -2761,6 +3656,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort log10(numberField)', []); + testErrorsAndWarnings('row var = log10(to_integer(true))', []); + + testErrorsAndWarnings('row var = log10(true)', [ + 'Argument of [log10] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where log10(booleanField) > 0', [ + 'Argument of [log10] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = log10(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval log10(booleanField)', [ + 'Argument of [log10] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('ltrim', () => { @@ -2795,6 +3705,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort ltrim(stringField)', []); + testErrorsAndWarnings('row var = ltrim(to_string(true))', []); + + testErrorsAndWarnings('row var = ltrim(true)', [ + 'Argument of [ltrim] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where length(ltrim(booleanField)) > 0', [ + 'Argument of [ltrim] must be [string], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = ltrim(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval ltrim(booleanField)', [ + 'Argument of [ltrim] must be [string], found value [booleanField] type [boolean]', + ]); }); describe('mv_avg', () => { @@ -2829,6 +3754,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort mv_avg(numberField)', []); + testErrorsAndWarnings('row var = mv_avg(to_integer(true))', []); + + testErrorsAndWarnings('row var = mv_avg(true)', [ + 'Argument of [mv_avg] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where mv_avg(booleanField) > 0', [ + 'Argument of [mv_avg] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_avg(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_avg(booleanField)', [ + 'Argument of [mv_avg] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('mv_concat', () => { @@ -2872,6 +3812,30 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort mv_concat(stringField, stringField)', []); + testErrorsAndWarnings('row var = mv_concat(to_string(true), to_string(true))', []); + + testErrorsAndWarnings('row var = mv_concat(true, true)', [ + 'Argument of [mv_concat] must be [string], found value [true] type [boolean]', + 'Argument of [mv_concat] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(mv_concat(booleanField, booleanField)) > 0', + [ + 'Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]', + 'Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_concat(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval mv_concat(booleanField, booleanField)', [ + 'Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]', + 'Argument of [mv_concat] must be [string], found value [booleanField] type [boolean]', + ]); }); describe('mv_count', () => { @@ -2885,23 +3849,213 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort mv_count(stringField)', []); - }); + testErrorsAndWarnings('row var = mv_count(true)', []); + testErrorsAndWarnings('row mv_count(true)', []); + testErrorsAndWarnings('row var = mv_count(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_count(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_count(to_cartesianpoint("POINT (30 10)"))', []); - describe('mv_dedupe', () => { - testErrorsAndWarnings('row var = mv_dedupe("a")', []); - testErrorsAndWarnings('row mv_dedupe("a")', []); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(stringField)', []); - testErrorsAndWarnings('from a_index | eval mv_dedupe(stringField)', []); + testErrorsAndWarnings( + 'row var = mv_count(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); - testErrorsAndWarnings('from a_index | eval var = mv_dedupe(*)', [ - 'Using wildcards (*) in mv_dedupe is not allowed', - ]); + testErrorsAndWarnings('row var = mv_count(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_count(to_cartesianshape("POINT (30 10)"))', []); - testErrorsAndWarnings('from a_index | sort mv_dedupe(stringField)', []); - }); + testErrorsAndWarnings( + 'row var = mv_count(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + [] + ); - describe('mv_first', () => { - testErrorsAndWarnings('row var = mv_first("a")', []); + testErrorsAndWarnings('row var = mv_count(now())', []); + testErrorsAndWarnings('row mv_count(now())', []); + testErrorsAndWarnings('row var = mv_count(to_datetime(now()))', []); + testErrorsAndWarnings('row var = mv_count(5)', []); + testErrorsAndWarnings('row mv_count(5)', []); + testErrorsAndWarnings('row var = mv_count(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_count(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_count(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_count(to_geopoint(to_geopoint("POINT (30 10)")))', []); + testErrorsAndWarnings('row var = mv_count(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_count(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_count(to_geoshape(to_geopoint("POINT (30 10)")))', []); + testErrorsAndWarnings('row var = mv_count(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_count(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_count(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_count(to_string(true))', []); + testErrorsAndWarnings('row var = mv_count(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_count(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_count(to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_count(booleanField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(cartesianPointField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(cartesianShapeField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(geoPointField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(geoShapeField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(ipField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(stringField) > 0', []); + testErrorsAndWarnings('from a_index | where mv_count(versionField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_boolean(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_count(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_count(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_count(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_count(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(numberField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_geopoint(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_geoshape(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(to_version(stringField))', []); + + testErrorsAndWarnings('from a_index | eval mv_count(booleanField, extraArg)', [ + 'Error: [mv_count] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_count(booleanField)', []); + }); + + describe('mv_dedupe', () => { + testErrorsAndWarnings('row var = mv_dedupe("a")', []); + testErrorsAndWarnings('row mv_dedupe("a")', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(stringField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(*)', [ + 'Using wildcards (*) in mv_dedupe is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort mv_dedupe(stringField)', []); + testErrorsAndWarnings('row var = mv_dedupe(true)', []); + testErrorsAndWarnings('row mv_dedupe(true)', []); + testErrorsAndWarnings('row var = mv_dedupe(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_dedupe(now())', []); + testErrorsAndWarnings('row mv_dedupe(now())', []); + testErrorsAndWarnings('row var = mv_dedupe(to_datetime(now()))', []); + testErrorsAndWarnings('row var = mv_dedupe(5)', []); + testErrorsAndWarnings('row mv_dedupe(5)', []); + testErrorsAndWarnings('row var = mv_dedupe(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_dedupe(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_string(true))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_dedupe(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_version("a"))', []); + + testErrorsAndWarnings('from a_index | where mv_dedupe(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where length(mv_dedupe(stringField)) > 0', []); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(numberField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(to_version(stringField))', []); + + testErrorsAndWarnings('from a_index | eval mv_dedupe(booleanField, extraArg)', [ + 'Error: [mv_dedupe] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_dedupe(booleanField)', []); + testErrorsAndWarnings('row mv_dedupe(to_cartesianpoint("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = mv_dedupe(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = mv_dedupe(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_dedupe(to_cartesianshape("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = mv_dedupe(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = mv_dedupe(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_dedupe(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_geopoint(to_geopoint("POINT (30 10)")))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_dedupe(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_dedupe(to_geoshape(to_geopoint("POINT (30 10)")))', []); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_dedupe(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_dedupe(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_dedupe(to_geopoint(geoPointField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = mv_dedupe(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_dedupe(geoShapeField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = mv_dedupe(to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval mv_dedupe(numberField, extraArg)', [ + 'Error: [mv_dedupe] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_dedupe(numberField)', []); + }); + + describe('mv_first', () => { + testErrorsAndWarnings('row var = mv_first("a")', []); testErrorsAndWarnings('row mv_first("a")', []); testErrorsAndWarnings('from a_index | eval var = mv_first(stringField)', []); testErrorsAndWarnings('from a_index | eval mv_first(stringField)', []); @@ -2911,6 +4065,90 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort mv_first(stringField)', []); + testErrorsAndWarnings('row var = mv_first(true)', []); + testErrorsAndWarnings('row mv_first(true)', []); + testErrorsAndWarnings('row var = mv_first(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_first(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_first(to_cartesianpoint("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = mv_first(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = mv_first(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_first(to_cartesianshape("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = mv_first(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = mv_first(now())', []); + testErrorsAndWarnings('row mv_first(now())', []); + testErrorsAndWarnings('row var = mv_first(to_datetime(now()))', []); + testErrorsAndWarnings('row var = mv_first(5)', []); + testErrorsAndWarnings('row mv_first(5)', []); + testErrorsAndWarnings('row var = mv_first(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_first(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_first(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_first(to_geopoint(to_geopoint("POINT (30 10)")))', []); + testErrorsAndWarnings('row var = mv_first(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_first(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_first(to_geoshape(to_geopoint("POINT (30 10)")))', []); + testErrorsAndWarnings('row var = mv_first(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_first(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_first(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_first(to_string(true))', []); + testErrorsAndWarnings('row var = mv_first(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_first(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_first(to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_first(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where length(mv_first(stringField)) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_boolean(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_first(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_first(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_first(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_first(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(numberField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_geopoint(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_geoshape(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_first(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_first(to_version(stringField))', []); + + testErrorsAndWarnings('from a_index | eval mv_first(booleanField, extraArg)', [ + 'Error: [mv_first] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_first(booleanField)', []); }); describe('mv_last', () => { @@ -2924,6 +4162,90 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort mv_last(stringField)', []); + testErrorsAndWarnings('row var = mv_last(true)', []); + testErrorsAndWarnings('row mv_last(true)', []); + testErrorsAndWarnings('row var = mv_last(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_last(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_last(to_cartesianpoint("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = mv_last(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = mv_last(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_last(to_cartesianshape("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = mv_last(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = mv_last(now())', []); + testErrorsAndWarnings('row mv_last(now())', []); + testErrorsAndWarnings('row var = mv_last(to_datetime(now()))', []); + testErrorsAndWarnings('row var = mv_last(5)', []); + testErrorsAndWarnings('row mv_last(5)', []); + testErrorsAndWarnings('row var = mv_last(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_last(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_last(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_last(to_geopoint(to_geopoint("POINT (30 10)")))', []); + testErrorsAndWarnings('row var = mv_last(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row mv_last(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = mv_last(to_geoshape(to_geopoint("POINT (30 10)")))', []); + testErrorsAndWarnings('row var = mv_last(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_last(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_last(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_last(to_string(true))', []); + testErrorsAndWarnings('row var = mv_last(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_last(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_last(to_version("a"))', []); + testErrorsAndWarnings('from a_index | where mv_last(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where length(mv_last(stringField)) > 0', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_boolean(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_last(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_last(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_last(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_last(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(numberField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_geopoint(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_geoshape(geoPointField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(to_version(stringField))', []); + + testErrorsAndWarnings('from a_index | eval mv_last(booleanField, extraArg)', [ + 'Error: [mv_last] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_last(booleanField)', []); }); describe('mv_max', () => { @@ -2937,6 +4259,66 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort mv_max(stringField)', []); + testErrorsAndWarnings('row var = mv_max(true)', []); + testErrorsAndWarnings('row mv_max(true)', []); + testErrorsAndWarnings('row var = mv_max(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_max(now())', []); + testErrorsAndWarnings('row mv_max(now())', []); + testErrorsAndWarnings('row var = mv_max(to_datetime(now()))', []); + testErrorsAndWarnings('row var = mv_max(5)', []); + testErrorsAndWarnings('row mv_max(5)', []); + testErrorsAndWarnings('row var = mv_max(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_max(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_max(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_max(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_max(to_string(true))', []); + testErrorsAndWarnings('row var = mv_max(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_max(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_max(to_version("a"))', []); + + testErrorsAndWarnings('row var = mv_max(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [mv_max] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where mv_max(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_max(cartesianPointField) > 0', [ + 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where length(mv_max(stringField)) > 0', []); + + testErrorsAndWarnings('from a_index | where length(mv_max(cartesianPointField)) > 0', [ + 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_max(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_max(cartesianPointField)', [ + 'Argument of [mv_max] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_max(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(numberField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(to_version(stringField))', []); + + testErrorsAndWarnings('from a_index | eval mv_max(booleanField, extraArg)', [ + 'Error: [mv_max] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_max(booleanField)', []); }); describe('mv_median', () => { @@ -2971,6 +4353,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort mv_median(numberField)', []); + testErrorsAndWarnings('row var = mv_median(to_integer(true))', []); + + testErrorsAndWarnings('row var = mv_median(true)', [ + 'Argument of [mv_median] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where mv_median(booleanField) > 0', [ + 'Argument of [mv_median] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_median(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_median(booleanField)', [ + 'Argument of [mv_median] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('mv_min', () => { @@ -2984,23 +4381,417 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort mv_min(stringField)', []); + testErrorsAndWarnings('row var = mv_min(true)', []); + testErrorsAndWarnings('row mv_min(true)', []); + testErrorsAndWarnings('row var = mv_min(to_boolean(true))', []); + testErrorsAndWarnings('row var = mv_min(now())', []); + testErrorsAndWarnings('row mv_min(now())', []); + testErrorsAndWarnings('row var = mv_min(to_datetime(now()))', []); + testErrorsAndWarnings('row var = mv_min(5)', []); + testErrorsAndWarnings('row mv_min(5)', []); + testErrorsAndWarnings('row var = mv_min(to_integer(true))', []); + testErrorsAndWarnings('row var = mv_min(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row mv_min(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = mv_min(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = mv_min(to_string(true))', []); + testErrorsAndWarnings('row var = mv_min(to_version("1.0.0"))', []); + testErrorsAndWarnings('row mv_min(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = mv_min(to_version("a"))', []); + + testErrorsAndWarnings('row var = mv_min(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [mv_min] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where mv_min(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_min(cartesianPointField) > 0', [ + 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where length(mv_min(stringField)) > 0', []); + + testErrorsAndWarnings('from a_index | where length(mv_min(cartesianPointField)) > 0', [ + 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_min(booleanField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_min(cartesianPointField)', [ + 'Argument of [mv_min] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_min(dateField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(numberField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(ipField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(versionField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(to_version(stringField))', []); + + testErrorsAndWarnings('from a_index | eval mv_min(booleanField, extraArg)', [ + 'Error: [mv_min] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_min(booleanField)', []); }); - describe('mv_slice', () => { - testErrorsAndWarnings('row var = mv_slice("a", 5, 5)', []); - testErrorsAndWarnings('row mv_slice("a", 5, 5)', []); + describe('mv_slice', () => { + testErrorsAndWarnings('row var = mv_slice("a", 5, 5)', []); + testErrorsAndWarnings('row mv_slice("a", 5, 5)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(stringField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(stringField, numberField, numberField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | sort mv_slice(stringField, numberField, numberField)', + [] + ); + testErrorsAndWarnings('row var = mv_slice(true, 5, 5)', []); + testErrorsAndWarnings('row mv_slice(true, 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_boolean(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(to_cartesianpoint("POINT (30 10)"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_cartesianpoint("POINT (30 10)"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(to_cartesianshape("POINT (30 10)"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_cartesianshape("POINT (30 10)"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(now(), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(now(), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_datetime(now()), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(5, 5, 5)', []); + testErrorsAndWarnings('row mv_slice(5, 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_integer(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(to_geopoint("POINT (30 10)"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_geopoint("POINT (30 10)"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_geopoint(to_geopoint("POINT (30 10)")), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(to_geoshape("POINT (30 10)"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_geoshape("POINT (30 10)"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_geoshape(to_geopoint("POINT (30 10)")), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(to_ip("127.0.0.1"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_ip("127.0.0.1"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_ip(to_ip("127.0.0.1")), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings( + 'row var = mv_slice(to_string(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(to_version("1.0.0"), 5, 5)', []); + testErrorsAndWarnings('row mv_slice(to_version("1.0.0"), 5, 5)', []); + + testErrorsAndWarnings( + 'row var = mv_slice(to_version("a"), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_slice(to_version("1.0.0"), true, true)', [ + 'Argument of [mv_slice] must be [number], found value [true] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | where mv_slice(numberField, numberField, numberField) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where mv_slice(numberField, booleanField, booleanField) > 0', + [ + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | where length(mv_slice(stringField, numberField, numberField)) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where length(mv_slice(stringField, booleanField, booleanField)) > 0', + [ + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(booleanField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(booleanField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_boolean(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(booleanField, booleanField, booleanField)', + [ + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(cartesianPointField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(cartesianPointField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_cartesianpoint(cartesianPointField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(cartesianPointField, booleanField, booleanField)', + [ + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(cartesianShapeField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(cartesianShapeField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_cartesianshape(cartesianPointField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(cartesianShapeField, booleanField, booleanField)', + [ + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(dateField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(dateField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_datetime(dateField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(dateField, booleanField, booleanField)', + [ + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(numberField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(numberField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_integer(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(numberField, booleanField, booleanField)', + [ + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(geoPointField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(geoPointField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_geopoint(geoPointField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(geoPointField, booleanField, booleanField)', + [ + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(geoShapeField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(geoShapeField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_geoshape(geoPointField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(geoShapeField, booleanField, booleanField)', + [ + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(ipField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(ipField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_ip(ipField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval mv_slice(ipField, booleanField, booleanField)', [ + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(stringField, booleanField, booleanField)', + [ + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_slice(versionField, numberField, numberField)', + [] + ); testErrorsAndWarnings( - 'from a_index | eval var = mv_slice(stringField, numberField, numberField)', + 'from a_index | eval mv_slice(versionField, numberField, numberField)', [] ); testErrorsAndWarnings( - 'from a_index | eval mv_slice(stringField, numberField, numberField)', + 'from a_index | eval var = mv_slice(to_version(stringField), to_integer(booleanField), to_integer(booleanField))', [] ); + testErrorsAndWarnings( - 'from a_index | sort mv_slice(stringField, numberField, numberField)', + 'from a_index | eval mv_slice(versionField, booleanField, booleanField)', + [ + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + 'Argument of [mv_slice] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_slice(booleanField, numberField, numberField, extraArg)', + ['Error: [mv_slice] function expects no more than 3 arguments, got 4.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort mv_slice(booleanField, numberField, numberField)', [] ); }); @@ -3011,6 +4802,58 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval var = mv_sort(stringField, "asc")', []); testErrorsAndWarnings('from a_index | eval mv_sort(stringField, "asc")', []); testErrorsAndWarnings('from a_index | sort mv_sort(stringField, "asc")', []); + testErrorsAndWarnings('row var = mv_sort(true, "asc")', []); + testErrorsAndWarnings('row mv_sort(true, "asc")', []); + testErrorsAndWarnings('row var = mv_sort(now(), "asc")', []); + testErrorsAndWarnings('row mv_sort(now(), "asc")', []); + testErrorsAndWarnings('row var = mv_sort(5, "asc")', []); + testErrorsAndWarnings('row mv_sort(5, "asc")', []); + testErrorsAndWarnings('row var = mv_sort(to_ip("127.0.0.1"), "asc")', []); + testErrorsAndWarnings('row mv_sort(to_ip("127.0.0.1"), "asc")', []); + testErrorsAndWarnings('row var = mv_sort(to_version("1.0.0"), "asc")', []); + testErrorsAndWarnings('row mv_sort(to_version("1.0.0"), "asc")', []); + + testErrorsAndWarnings('row var = mv_sort(to_cartesianpoint("POINT (30 10)"), true)', [ + 'Argument of [mv_sort] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + 'Argument of [mv_sort] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where mv_sort(numberField, "asc") > 0', []); + + testErrorsAndWarnings( + 'from a_index | where mv_sort(cartesianPointField, booleanField) > 0', + [ + 'Argument of [mv_sort] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + 'Argument of [mv_sort] must be [string], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings('from a_index | where length(mv_sort(stringField, "asc")) > 0', []); + + testErrorsAndWarnings( + 'from a_index | where length(mv_sort(cartesianPointField, booleanField)) > 0', + [ + 'Argument of [mv_sort] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + 'Argument of [mv_sort] must be [string], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_sort(booleanField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(booleanField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(dateField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(dateField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(numberField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(numberField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(ipField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(ipField, "asc")', []); + testErrorsAndWarnings('from a_index | eval var = mv_sort(versionField, "asc")', []); + testErrorsAndWarnings('from a_index | eval mv_sort(versionField, "asc")', []); + + testErrorsAndWarnings('from a_index | eval mv_sort(booleanField, "asc", extraArg)', [ + 'Error: [mv_sort] function expects no more than 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_sort(booleanField, "asc")', []); }); describe('mv_sum', () => { @@ -3045,11 +4888,28 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort mv_sum(numberField)', []); + testErrorsAndWarnings('row var = mv_sum(to_integer(true))', []); + + testErrorsAndWarnings('row var = mv_sum(true)', [ + 'Argument of [mv_sum] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where mv_sum(booleanField) > 0', [ + 'Argument of [mv_sum] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_sum(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval mv_sum(booleanField)', [ + 'Argument of [mv_sum] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('mv_zip', () => { testErrorsAndWarnings('row var = mv_zip("a", "a", "a")', []); + testErrorsAndWarnings('row var = mv_zip("a", "a")', []); testErrorsAndWarnings('row mv_zip("a", "a", "a")', []); + testErrorsAndWarnings('row mv_zip("a", "a")', []); testErrorsAndWarnings( 'row var = mv_zip(to_string("a"), to_string("a"), to_string("a"))', @@ -3081,6 +4941,8 @@ describe('validation logic', () => { [] ); + testErrorsAndWarnings('from a_index | eval mv_zip(stringField, stringField)', []); + testErrorsAndWarnings( 'from a_index | eval mv_zip(stringField, stringField, stringField)', [] @@ -3099,13 +4961,46 @@ describe('validation logic', () => { testErrorsAndWarnings( 'from a_index | eval mv_zip(stringField, stringField, stringField, extraArg)', - ['Error: [mv_zip] function expects exactly 3 arguments, got 4.'] + ['Error: [mv_zip] function expects no more than 3 arguments, got 4.'] ); testErrorsAndWarnings( 'from a_index | sort mv_zip(stringField, stringField, stringField)', [] ); + testErrorsAndWarnings( + 'row var = mv_zip(to_string(true), to_string(true), to_string(true))', + [] + ); + + testErrorsAndWarnings('row var = mv_zip(true, true, true)', [ + 'Argument of [mv_zip] must be [string], found value [true] type [boolean]', + 'Argument of [mv_zip] must be [string], found value [true] type [boolean]', + 'Argument of [mv_zip] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(mv_zip(booleanField, booleanField, booleanField)) > 0', + [ + 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', + 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', + 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(to_string(booleanField), to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(booleanField, booleanField, booleanField)', + [ + 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', + 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', + 'Argument of [mv_zip] must be [string], found value [booleanField] type [boolean]', + ] + ); }); describe('now', () => { @@ -3170,6 +5065,27 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort pow(numberField, numberField)', []); + testErrorsAndWarnings('row var = pow(to_integer(true), to_integer(true))', []); + + testErrorsAndWarnings('row var = pow(true, true)', [ + 'Argument of [pow] must be [number], found value [true] type [boolean]', + 'Argument of [pow] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where pow(booleanField, booleanField) > 0', [ + 'Argument of [pow] must be [number], found value [booleanField] type [boolean]', + 'Argument of [pow] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval pow(booleanField, booleanField)', [ + 'Argument of [pow] must be [number], found value [booleanField] type [boolean]', + 'Argument of [pow] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('replace', () => { @@ -3234,6 +5150,39 @@ describe('validation logic', () => { 'from a_index | sort replace(stringField, stringField, stringField)', [] ); + testErrorsAndWarnings( + 'row var = replace(to_string(true), to_string(true), to_string(true))', + [] + ); + + testErrorsAndWarnings('row var = replace(true, true, true)', [ + 'Argument of [replace] must be [string], found value [true] type [boolean]', + 'Argument of [replace] must be [string], found value [true] type [boolean]', + 'Argument of [replace] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(replace(booleanField, booleanField, booleanField)) > 0', + [ + 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', + 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', + 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(to_string(booleanField), to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(booleanField, booleanField, booleanField)', + [ + 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', + 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', + 'Argument of [replace] must be [string], found value [booleanField] type [boolean]', + ] + ); }); describe('right', () => { @@ -3274,6 +5223,30 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort right(stringField, numberField)', []); + testErrorsAndWarnings('row var = right(to_string(true), to_integer(true))', []); + + testErrorsAndWarnings('row var = right(true, true)', [ + 'Argument of [right] must be [string], found value [true] type [boolean]', + 'Argument of [right] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(right(booleanField, booleanField)) > 0', + [ + 'Argument of [right] must be [string], found value [booleanField] type [boolean]', + 'Argument of [right] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = right(to_string(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval right(booleanField, booleanField)', [ + 'Argument of [right] must be [string], found value [booleanField] type [boolean]', + 'Argument of [right] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('round', () => { @@ -3311,6 +5284,50 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort round(numberField, numberField)', []); + testErrorsAndWarnings('row var = round(5)', []); + testErrorsAndWarnings('row round(5)', []); + testErrorsAndWarnings('row var = round(to_integer(true))', []); + testErrorsAndWarnings('row var = round(to_integer(true), to_integer(true))', []); + + testErrorsAndWarnings('row var = round(true, true)', [ + 'Argument of [round] must be [number], found value [true] type [boolean]', + 'Argument of [round] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where round(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where round(booleanField) > 0', [ + 'Argument of [round] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where round(booleanField, booleanField) > 0', [ + 'Argument of [round] must be [number], found value [booleanField] type [boolean]', + 'Argument of [round] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = round(numberField)', []); + testErrorsAndWarnings('from a_index | eval round(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = round(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval round(booleanField)', [ + 'Argument of [round] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = round(*)', [ + 'Using wildcards (*) in round is not allowed', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = round(to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval round(booleanField, booleanField)', [ + 'Argument of [round] must be [number], found value [booleanField] type [boolean]', + 'Argument of [round] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | sort round(numberField)', []); }); describe('rtrim', () => { @@ -3345,6 +5362,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort rtrim(stringField)', []); + testErrorsAndWarnings('row var = rtrim(to_string(true))', []); + + testErrorsAndWarnings('row var = rtrim(true)', [ + 'Argument of [rtrim] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where length(rtrim(booleanField)) > 0', [ + 'Argument of [rtrim] must be [string], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = rtrim(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval rtrim(booleanField)', [ + 'Argument of [rtrim] must be [string], found value [booleanField] type [boolean]', + ]); }); describe('signum', () => { @@ -3379,6 +5411,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort signum(numberField)', []); + testErrorsAndWarnings('row var = signum(to_integer(true))', []); + + testErrorsAndWarnings('row var = signum(true)', [ + 'Argument of [signum] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where signum(booleanField) > 0', [ + 'Argument of [signum] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = signum(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval signum(booleanField)', [ + 'Argument of [signum] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('sin', () => { @@ -3413,6 +5460,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort sin(numberField)', []); + testErrorsAndWarnings('row var = sin(to_integer(true))', []); + + testErrorsAndWarnings('row var = sin(true)', [ + 'Argument of [sin] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sin(booleanField) > 0', [ + 'Argument of [sin] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = sin(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval sin(booleanField)', [ + 'Argument of [sin] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('sinh', () => { @@ -3447,6 +5509,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort sinh(numberField)', []); + testErrorsAndWarnings('row var = sinh(to_integer(true))', []); + + testErrorsAndWarnings('row var = sinh(true)', [ + 'Argument of [sinh] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sinh(booleanField) > 0', [ + 'Argument of [sinh] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = sinh(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval sinh(booleanField)', [ + 'Argument of [sinh] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('split', () => { @@ -3487,6 +5564,30 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort split(stringField, stringField)', []); + testErrorsAndWarnings('row var = split(to_string(true), to_string(true))', []); + + testErrorsAndWarnings('row var = split(true, true)', [ + 'Argument of [split] must be [string], found value [true] type [boolean]', + 'Argument of [split] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(split(booleanField, booleanField)) > 0', + [ + 'Argument of [split] must be [string], found value [booleanField] type [boolean]', + 'Argument of [split] must be [string], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = split(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval split(booleanField, booleanField)', [ + 'Argument of [split] must be [string], found value [booleanField] type [boolean]', + 'Argument of [split] must be [string], found value [booleanField] type [boolean]', + ]); }); describe('sqrt', () => { @@ -3521,6 +5622,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort sqrt(numberField)', []); + testErrorsAndWarnings('row var = sqrt(to_integer(true))', []); + + testErrorsAndWarnings('row var = sqrt(true)', [ + 'Argument of [sqrt] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where sqrt(booleanField) > 0', [ + 'Argument of [sqrt] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = sqrt(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval sqrt(booleanField)', [ + 'Argument of [sqrt] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('st_contains', () => { @@ -3537,8 +5653,8 @@ describe('validation logic', () => { testErrorsAndWarnings('row var = st_contains(to_geopoint("a"), to_geopoint("a"))', []); testErrorsAndWarnings('row var = st_contains("a", "a")', [ - 'Argument of [st_contains] must be [geo_point], found value ["a"] type [string]', - 'Argument of [st_contains] must be [geo_point], found value ["a"] type [string]', + 'Argument of [st_contains] must be [cartesian_point], found value ["a"] type [string]', + 'Argument of [st_contains] must be [cartesian_point], found value ["a"] type [string]', ]); testErrorsAndWarnings( @@ -3648,8 +5764,8 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | eval st_contains(stringField, stringField)', [ - 'Argument of [st_contains] must be [geo_point], found value [stringField] type [string]', - 'Argument of [st_contains] must be [geo_point], found value [stringField] type [string]', + 'Argument of [st_contains] must be [cartesian_point], found value [stringField] type [string]', + 'Argument of [st_contains] must be [cartesian_point], found value [stringField] type [string]', ]); testErrorsAndWarnings( @@ -3701,81 +5817,176 @@ describe('validation logic', () => { ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)', + 'from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_cartesianpoint(stringField), cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianPointField, cartesianShapeField, extraArg)', + ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(cartesianShapeField, to_cartesianpoint(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianShapeField, cartesianPointField, extraArg)', + ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(cartesianShapeField, cartesianShapeField, extraArg)', + ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort st_contains(geoPointField, geoPointField)', []); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianPointField, cartesianPointField)', + 'row var = st_contains(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + 'row var = st_contains(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'row var = st_contains(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)', + 'row var = st_contains(to_geopoint(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianPointField, cartesianShapeField)', + 'row var = st_contains(to_geoshape(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(to_cartesianpoint(stringField), cartesianShapeField)', + 'row var = st_contains(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', [] ); + testErrorsAndWarnings('row var = st_contains(true, true)', [ + 'Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_contains] must be [cartesian_point], found value [true] type [boolean]', + ]); + testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianPointField, cartesianShapeField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] ); + testErrorsAndWarnings('from a_index | eval st_contains(booleanField, booleanField)', [ + 'Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_contains] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)', + 'from a_index | eval var = st_contains(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianShapeField, cartesianPointField)', + 'from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianShapeField, to_cartesianpoint(stringField))', + 'from a_index | eval var = st_contains(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianShapeField, cartesianPointField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geopoint(geoPointField))', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)', + 'from a_index | eval var = st_contains(to_geopoint(geoPointField), to_geoshape(geoPointField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)', + 'from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geopoint(geoPointField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_contains(cartesianShapeField, cartesianShapeField, extraArg)', - ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + 'from a_index | eval var = st_contains(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] ); - testErrorsAndWarnings('from a_index | sort st_contains(geoPointField, geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | sort st_contains(cartesianPointField, cartesianPointField)', + [] + ); }); describe('st_disjoint', () => { @@ -3792,8 +6003,8 @@ describe('validation logic', () => { testErrorsAndWarnings('row var = st_disjoint(to_geopoint("a"), to_geopoint("a"))', []); testErrorsAndWarnings('row var = st_disjoint("a", "a")', [ - 'Argument of [st_disjoint] must be [geo_point], found value ["a"] type [string]', - 'Argument of [st_disjoint] must be [geo_point], found value ["a"] type [string]', + 'Argument of [st_disjoint] must be [cartesian_point], found value ["a"] type [string]', + 'Argument of [st_disjoint] must be [cartesian_point], found value ["a"] type [string]', ]); testErrorsAndWarnings( @@ -3903,8 +6114,8 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | eval st_disjoint(stringField, stringField)', [ - 'Argument of [st_disjoint] must be [geo_point], found value [stringField] type [string]', - 'Argument of [st_disjoint] must be [geo_point], found value [stringField] type [string]', + 'Argument of [st_disjoint] must be [cartesian_point], found value [stringField] type [string]', + 'Argument of [st_disjoint] must be [cartesian_point], found value [stringField] type [string]', ]); testErrorsAndWarnings( @@ -4031,6 +6242,101 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | sort st_disjoint(geoPointField, geoPointField)', []); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_geopoint(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_geoshape(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = st_disjoint(true, true)', [ + 'Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_disjoint] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_disjoint(booleanField, booleanField)', [ + 'Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_disjoint] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_geopoint(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_disjoint(cartesianPointField, cartesianPointField)', + [] + ); }); describe('st_intersects', () => { @@ -4047,8 +6353,8 @@ describe('validation logic', () => { testErrorsAndWarnings('row var = st_intersects(to_geopoint("a"), to_geopoint("a"))', []); testErrorsAndWarnings('row var = st_intersects("a", "a")', [ - 'Argument of [st_intersects] must be [geo_point], found value ["a"] type [string]', - 'Argument of [st_intersects] must be [geo_point], found value ["a"] type [string]', + 'Argument of [st_intersects] must be [cartesian_point], found value ["a"] type [string]', + 'Argument of [st_intersects] must be [cartesian_point], found value ["a"] type [string]', ]); testErrorsAndWarnings( @@ -4162,8 +6468,8 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | eval st_intersects(stringField, stringField)', [ - 'Argument of [st_intersects] must be [geo_point], found value [stringField] type [string]', - 'Argument of [st_intersects] must be [geo_point], found value [stringField] type [string]', + 'Argument of [st_intersects] must be [cartesian_point], found value [stringField] type [string]', + 'Argument of [st_intersects] must be [cartesian_point], found value [stringField] type [string]', ]); testErrorsAndWarnings( @@ -4305,6 +6611,101 @@ describe('validation logic', () => { 'from a_index | sort st_intersects(geoPointField, geoPointField)', [] ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_geopoint(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_geoshape(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = st_intersects(true, true)', [ + 'Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_intersects] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_intersects(booleanField, booleanField)', [ + 'Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_intersects] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_geopoint(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_geoshape(geoPointField), to_geoshape(geoPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_intersects(cartesianPointField, cartesianPointField)', + [] + ); }); describe('st_within', () => { @@ -4321,8 +6722,8 @@ describe('validation logic', () => { testErrorsAndWarnings('row var = st_within(to_geopoint("a"), to_geopoint("a"))', []); testErrorsAndWarnings('row var = st_within("a", "a")', [ - 'Argument of [st_within] must be [geo_point], found value ["a"] type [string]', - 'Argument of [st_within] must be [geo_point], found value ["a"] type [string]', + 'Argument of [st_within] must be [cartesian_point], found value ["a"] type [string]', + 'Argument of [st_within] must be [cartesian_point], found value ["a"] type [string]', ]); testErrorsAndWarnings( @@ -4432,134 +6833,229 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | eval st_within(stringField, stringField)', [ - 'Argument of [st_within] must be [geo_point], found value [stringField] type [string]', - 'Argument of [st_within] must be [geo_point], found value [stringField] type [string]', + 'Argument of [st_within] must be [cartesian_point], found value [stringField] type [string]', + 'Argument of [st_within] must be [cartesian_point], found value [stringField] type [string]', ]); testErrorsAndWarnings( - 'from a_index | eval st_within(geoPointField, geoPointField, extraArg)', + 'from a_index | eval st_within(geoPointField, geoPointField, extraArg)', + ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(geoPointField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_within(geoPointField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_geopoint(stringField), geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(geoPointField, geoShapeField, extraArg)', + ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(geoShapeField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_within(geoShapeField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(geoShapeField, to_geopoint(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(geoShapeField, geoPointField, extraArg)', + ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(geoShapeField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_within(geoShapeField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval st_within(geoShapeField, geoShapeField, extraArg)', + ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_cartesianpoint(stringField), cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianPointField, cartesianShapeField, extraArg)', ['Error: [st_within] function expects exactly 2 arguments, got 3.'] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoPointField, geoShapeField)', + 'from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)', [] ); - testErrorsAndWarnings('from a_index | eval st_within(geoPointField, geoShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_geopoint(stringField), geoShapeField)', + 'from a_index | eval st_within(cartesianShapeField, cartesianPointField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(geoPointField, geoShapeField, extraArg)', + 'from a_index | eval var = st_within(cartesianShapeField, to_cartesianpoint(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianShapeField, cartesianPointField, extraArg)', ['Error: [st_within] function expects exactly 2 arguments, got 3.'] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoShapeField, geoPointField)', + 'from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)', [] ); - testErrorsAndWarnings('from a_index | eval st_within(geoShapeField, geoPointField)', []); testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoShapeField, to_geopoint(stringField))', + 'from a_index | eval st_within(cartesianShapeField, cartesianShapeField)', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(geoShapeField, geoPointField, extraArg)', + 'from a_index | eval st_within(cartesianShapeField, cartesianShapeField, extraArg)', ['Error: [st_within] function expects exactly 2 arguments, got 3.'] ); + testErrorsAndWarnings('from a_index | sort st_within(geoPointField, geoPointField)', []); + testErrorsAndWarnings( - 'from a_index | eval var = st_within(geoShapeField, geoShapeField)', + 'row var = st_within(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', [] ); - testErrorsAndWarnings('from a_index | eval st_within(geoShapeField, geoShapeField)', []); testErrorsAndWarnings( - 'from a_index | eval st_within(geoShapeField, geoShapeField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'row var = st_within(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianPointField, cartesianPointField)', + 'row var = st_within(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianPointField, cartesianPointField)', + 'row var = st_within(to_cartesianshape(to_cartesianpoint("POINT (30 10)")), to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + 'row var = st_within(to_geopoint(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'row var = st_within(to_geopoint(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)', + 'row var = st_within(to_geoshape(to_geopoint("POINT (30 10)")), to_geopoint(to_geopoint("POINT (30 10)")))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianPointField, cartesianShapeField)', + 'row var = st_within(to_geoshape(to_geopoint("POINT (30 10)")), to_geoshape(to_geopoint("POINT (30 10)")))', [] ); + testErrorsAndWarnings('row var = st_within(true, true)', [ + 'Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]', + 'Argument of [st_within] must be [cartesian_point], found value [true] type [boolean]', + ]); + testErrorsAndWarnings( - 'from a_index | eval var = st_within(to_cartesianpoint(stringField), cartesianShapeField)', + 'from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianpoint(cartesianPointField))', [] ); + testErrorsAndWarnings('from a_index | eval st_within(booleanField, booleanField)', [ + 'Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]', + 'Argument of [st_within] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianPointField, cartesianShapeField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | eval var = st_within(to_cartesianpoint(cartesianPointField), to_cartesianshape(cartesianPointField))', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)', + 'from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianpoint(cartesianPointField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianShapeField, cartesianPointField)', + 'from a_index | eval var = st_within(to_cartesianshape(cartesianPointField), to_cartesianshape(cartesianPointField))', [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianShapeField, to_cartesianpoint(stringField))', + 'from a_index | eval var = st_within(to_geopoint(geoPointField), to_geopoint(geoPointField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianShapeField, cartesianPointField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | eval var = st_within(to_geopoint(geoPointField), to_geoshape(geoPointField))', + [] ); testErrorsAndWarnings( - 'from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)', + 'from a_index | eval var = st_within(to_geoshape(geoPointField), to_geopoint(geoPointField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianShapeField, cartesianShapeField)', + 'from a_index | eval var = st_within(to_geoshape(geoPointField), to_geoshape(geoPointField))', [] ); testErrorsAndWarnings( - 'from a_index | eval st_within(cartesianShapeField, cartesianShapeField, extraArg)', - ['Error: [st_within] function expects exactly 2 arguments, got 3.'] + 'from a_index | sort st_within(cartesianPointField, cartesianPointField)', + [] ); - - testErrorsAndWarnings('from a_index | sort st_within(geoPointField, geoPointField)', []); }); describe('st_x', () => { @@ -4568,7 +7064,7 @@ describe('validation logic', () => { testErrorsAndWarnings('row var = st_x(to_geopoint("a"))', []); testErrorsAndWarnings('row var = st_x("a")', [ - 'Argument of [st_x] must be [geo_point], found value ["a"] type [string]', + 'Argument of [st_x] must be [cartesian_point], found value ["a"] type [string]', ]); testErrorsAndWarnings('row var = st_x(to_cartesianpoint("POINT (30 10)"))', []); @@ -4579,7 +7075,7 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval var = st_x(to_geopoint(stringField))', []); testErrorsAndWarnings('from a_index | eval st_x(stringField)', [ - 'Argument of [st_x] must be [geo_point], found value [stringField] type [string]', + 'Argument of [st_x] must be [cartesian_point], found value [stringField] type [string]', ]); testErrorsAndWarnings('from a_index | eval st_x(geoPointField, extraArg)', [ @@ -4599,6 +7095,29 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort st_x(geoPointField)', []); + + testErrorsAndWarnings( + 'row var = st_x(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = st_x(to_geopoint(to_geopoint("POINT (30 10)")))', []); + + testErrorsAndWarnings('row var = st_x(true)', [ + 'Argument of [st_x] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_x(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_x(booleanField)', [ + 'Argument of [st_x] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_x(to_geopoint(geoPointField))', []); + testErrorsAndWarnings('from a_index | sort st_x(cartesianPointField)', []); }); describe('st_y', () => { @@ -4607,7 +7126,7 @@ describe('validation logic', () => { testErrorsAndWarnings('row var = st_y(to_geopoint("a"))', []); testErrorsAndWarnings('row var = st_y("a")', [ - 'Argument of [st_y] must be [geo_point], found value ["a"] type [string]', + 'Argument of [st_y] must be [cartesian_point], found value ["a"] type [string]', ]); testErrorsAndWarnings('row var = st_y(to_cartesianpoint("POINT (30 10)"))', []); @@ -4618,7 +7137,7 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval var = st_y(to_geopoint(stringField))', []); testErrorsAndWarnings('from a_index | eval st_y(stringField)', [ - 'Argument of [st_y] must be [geo_point], found value [stringField] type [string]', + 'Argument of [st_y] must be [cartesian_point], found value [stringField] type [string]', ]); testErrorsAndWarnings('from a_index | eval st_y(geoPointField, extraArg)', [ @@ -4638,6 +7157,29 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort st_y(geoPointField)', []); + + testErrorsAndWarnings( + 'row var = st_y(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = st_y(to_geopoint(to_geopoint("POINT (30 10)")))', []); + + testErrorsAndWarnings('row var = st_y(true)', [ + 'Argument of [st_y] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_y(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval st_y(booleanField)', [ + 'Argument of [st_y] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_y(to_geopoint(geoPointField))', []); + testErrorsAndWarnings('from a_index | sort st_y(cartesianPointField)', []); }); describe('starts_with', () => { @@ -4672,11 +7214,29 @@ describe('validation logic', () => { ); testErrorsAndWarnings('from a_index | sort starts_with(stringField, stringField)', []); + testErrorsAndWarnings('row var = starts_with(to_string(true), to_string(true))', []); + + testErrorsAndWarnings('row var = starts_with(true, true)', [ + 'Argument of [starts_with] must be [string], found value [true] type [boolean]', + 'Argument of [starts_with] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = starts_with(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval starts_with(booleanField, booleanField)', [ + 'Argument of [starts_with] must be [string], found value [booleanField] type [boolean]', + 'Argument of [starts_with] must be [string], found value [booleanField] type [boolean]', + ]); }); describe('substring', () => { testErrorsAndWarnings('row var = substring("a", 5, 5)', []); + testErrorsAndWarnings('row var = substring("a", 5)', []); testErrorsAndWarnings('row substring("a", 5, 5)', []); + testErrorsAndWarnings('row substring("a", 5)', []); testErrorsAndWarnings( 'row var = substring(to_string("a"), to_integer("a"), to_integer("a"))', @@ -4729,13 +7289,48 @@ describe('validation logic', () => { testErrorsAndWarnings( 'from a_index | eval substring(stringField, numberField, numberField, extraArg)', - ['Error: [substring] function expects exactly 3 arguments, got 4.'] + ['Error: [substring] function expects no more than 3 arguments, got 4.'] ); testErrorsAndWarnings( 'from a_index | sort substring(stringField, numberField, numberField)', [] ); + testErrorsAndWarnings('from a_index | sort substring(stringField, numberField)', []); + + testErrorsAndWarnings( + 'row var = substring(to_string(true), to_integer(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = substring(true, true, true)', [ + 'Argument of [substring] must be [string], found value [true] type [boolean]', + 'Argument of [substring] must be [number], found value [true] type [boolean]', + 'Argument of [substring] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(substring(booleanField, booleanField, booleanField)) > 0', + [ + 'Argument of [substring] must be [string], found value [booleanField] type [boolean]', + 'Argument of [substring] must be [number], found value [booleanField] type [boolean]', + 'Argument of [substring] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = substring(to_string(booleanField), to_integer(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval substring(booleanField, booleanField, booleanField)', + [ + 'Argument of [substring] must be [string], found value [booleanField] type [boolean]', + 'Argument of [substring] must be [number], found value [booleanField] type [boolean]', + 'Argument of [substring] must be [number], found value [booleanField] type [boolean]', + ] + ); }); describe('tan', () => { @@ -4770,6 +7365,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort tan(numberField)', []); + testErrorsAndWarnings('row var = tan(to_integer(true))', []); + + testErrorsAndWarnings('row var = tan(true)', [ + 'Argument of [tan] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where tan(booleanField) > 0', [ + 'Argument of [tan] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = tan(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval tan(booleanField)', [ + 'Argument of [tan] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('tanh', () => { @@ -4804,6 +7414,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort tanh(numberField)', []); + testErrorsAndWarnings('row var = tanh(to_integer(true))', []); + + testErrorsAndWarnings('row var = tanh(true)', [ + 'Argument of [tanh] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where tanh(booleanField) > 0', [ + 'Argument of [tanh] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = tanh(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval tanh(booleanField)', [ + 'Argument of [tanh] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('tau', () => { @@ -4833,6 +7458,40 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_boolean(stringField)', []); + testErrorsAndWarnings('row var = to_boolean(true)', []); + testErrorsAndWarnings('row to_boolean(true)', []); + testErrorsAndWarnings('row var = to_bool(true)', []); + testErrorsAndWarnings('row var = to_boolean(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_boolean(5)', []); + testErrorsAndWarnings('row to_boolean(5)', []); + testErrorsAndWarnings('row var = to_bool(5)', []); + testErrorsAndWarnings('row var = to_boolean(to_integer(true))', []); + testErrorsAndWarnings('row var = to_boolean(to_string(true))', []); + + testErrorsAndWarnings('row var = to_boolean(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_boolean] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_boolean(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_boolean(cartesianPointField)', [ + 'Argument of [to_boolean] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_boolean(numberField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_boolean(booleanField, extraArg)', [ + 'Error: [to_boolean] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_boolean(booleanField)', []); }); describe('to_cartesianpoint', () => { @@ -4846,6 +7505,49 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_cartesianpoint(stringField)', []); + testErrorsAndWarnings( + 'row var = to_cartesianpoint(to_cartesianpoint("POINT (30 10)"))', + [] + ); + testErrorsAndWarnings('row to_cartesianpoint(to_cartesianpoint("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = to_cartesianpoint(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = to_cartesianpoint(to_string(true))', []); + + testErrorsAndWarnings('row var = to_cartesianpoint(true)', [ + 'Argument of [to_cartesianpoint] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianpoint(cartesianPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianpoint(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(booleanField)', [ + 'Argument of [to_cartesianpoint] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianpoint(to_string(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval to_cartesianpoint(cartesianPointField, extraArg)', + ['Error: [to_cartesianpoint] function expects exactly one argument, got 2.'] + ); + + testErrorsAndWarnings('from a_index | sort to_cartesianpoint(cartesianPointField)', []); }); describe('to_cartesianshape', () => { @@ -4859,6 +7561,71 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_cartesianshape(stringField)', []); + testErrorsAndWarnings( + 'row var = to_cartesianshape(to_cartesianpoint("POINT (30 10)"))', + [] + ); + testErrorsAndWarnings('row to_cartesianshape(to_cartesianpoint("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = to_cartesianshape(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings( + 'row var = to_cartesianshape(to_cartesianshape("POINT (30 10)"))', + [] + ); + testErrorsAndWarnings('row to_cartesianshape(to_cartesianshape("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = to_cartesianshape(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = to_cartesianshape(to_string(true))', []); + + testErrorsAndWarnings('row var = to_cartesianshape(true)', [ + 'Argument of [to_cartesianshape] must be [cartesian_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(cartesianPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval to_cartesianshape(booleanField)', [ + 'Argument of [to_cartesianshape] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(cartesianShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = to_cartesianshape(to_string(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval to_cartesianshape(cartesianPointField, extraArg)', + ['Error: [to_cartesianshape] function expects exactly one argument, got 2.'] + ); + + testErrorsAndWarnings('from a_index | sort to_cartesianshape(cartesianPointField)', []); }); describe('to_datetime', () => { @@ -4874,6 +7641,43 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_datetime(stringField)', []); + testErrorsAndWarnings('row var = to_datetime(now())', []); + testErrorsAndWarnings('row to_datetime(now())', []); + testErrorsAndWarnings('row var = to_dt(now())', []); + testErrorsAndWarnings('row var = to_datetime(to_datetime(now()))', []); + testErrorsAndWarnings('row var = to_datetime(5)', []); + testErrorsAndWarnings('row to_datetime(5)', []); + testErrorsAndWarnings('row var = to_dt(5)', []); + testErrorsAndWarnings('row var = to_datetime(to_integer(true))', []); + testErrorsAndWarnings('row var = to_datetime(to_string(true))', []); + + testErrorsAndWarnings('row var = to_datetime(true)', [ + 'Argument of [to_datetime] must be [date], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_datetime(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(to_datetime(dateField))', []); + + testErrorsAndWarnings('from a_index | eval to_datetime(booleanField)', [ + 'Argument of [to_datetime] must be [date], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_datetime(numberField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(numberField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_datetime(to_integer(booleanField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_datetime(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_datetime(dateField, extraArg)', [ + 'Error: [to_datetime] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_datetime(dateField)', []); }); describe('to_degrees', () => { @@ -4908,6 +7712,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_degrees(numberField)', []); + testErrorsAndWarnings('row var = to_degrees(to_integer(true))', []); + + testErrorsAndWarnings('row var = to_degrees(true)', [ + 'Argument of [to_degrees] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where to_degrees(booleanField) > 0', [ + 'Argument of [to_degrees] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_degrees(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_degrees(booleanField)', [ + 'Argument of [to_degrees] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('to_double', () => { @@ -4923,6 +7742,57 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_double(stringField)', []); + testErrorsAndWarnings('row var = to_double(true)', []); + testErrorsAndWarnings('row to_double(true)', []); + testErrorsAndWarnings('row var = to_dbl(true)', []); + testErrorsAndWarnings('row var = to_double(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_double(5)', []); + testErrorsAndWarnings('row to_double(5)', []); + testErrorsAndWarnings('row var = to_dbl(5)', []); + testErrorsAndWarnings('row var = to_double(to_integer(true))', []); + testErrorsAndWarnings('row var = to_double(now())', []); + testErrorsAndWarnings('row to_double(now())', []); + testErrorsAndWarnings('row var = to_dbl(now())', []); + testErrorsAndWarnings('row var = to_double(to_datetime(now()))', []); + testErrorsAndWarnings('row var = to_double(to_string(true))', []); + + testErrorsAndWarnings('row var = to_double(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_double] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where to_double(booleanField) > 0', []); + + testErrorsAndWarnings('from a_index | where to_double(cartesianPointField) > 0', [ + 'Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where to_double(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where to_double(stringField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_double(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_double(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_double(cartesianPointField)', [ + 'Argument of [to_double] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_double(numberField)', []); + testErrorsAndWarnings('from a_index | eval to_double(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_double(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_double(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = to_double(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_double(booleanField, extraArg)', [ + 'Error: [to_double] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_double(booleanField)', []); }); describe('to_geopoint', () => { @@ -4935,7 +7805,37 @@ describe('validation logic', () => { 'Using wildcards (*) in to_geopoint is not allowed', ]); - testErrorsAndWarnings('from a_index | sort to_geopoint(stringField)', []); + testErrorsAndWarnings('from a_index | sort to_geopoint(stringField)', []); + testErrorsAndWarnings('row var = to_geopoint(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_geopoint(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings( + 'row var = to_geopoint(to_geopoint(to_geopoint("POINT (30 10)")))', + [] + ); + testErrorsAndWarnings('row var = to_geopoint(to_string(true))', []); + + testErrorsAndWarnings('row var = to_geopoint(true)', [ + 'Argument of [to_geopoint] must be [geo_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geopoint(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_geopoint(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_geopoint(to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval to_geopoint(booleanField)', [ + 'Argument of [to_geopoint] must be [geo_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geopoint(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_geopoint(geoPointField, extraArg)', [ + 'Error: [to_geopoint] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_geopoint(geoPointField)', []); }); describe('to_geoshape', () => { @@ -4949,6 +7849,48 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_geoshape(stringField)', []); + testErrorsAndWarnings('row var = to_geoshape(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_geoshape(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings( + 'row var = to_geoshape(to_geopoint(to_geopoint("POINT (30 10)")))', + [] + ); + testErrorsAndWarnings('row var = to_geoshape(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_geoshape(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings( + 'row var = to_geoshape(to_geoshape(to_geopoint("POINT (30 10)")))', + [] + ); + testErrorsAndWarnings('row var = to_geoshape(to_string(true))', []); + + testErrorsAndWarnings('row var = to_geoshape(true)', [ + 'Argument of [to_geoshape] must be [geo_point], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geoshape(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_geoshape(to_geopoint(geoPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval to_geoshape(booleanField)', [ + 'Argument of [to_geoshape] must be [geo_point], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_geoshape(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(geoShapeField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_geoshape(to_geoshape(geoPointField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_geoshape(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_geoshape(geoPointField, extraArg)', [ + 'Error: [to_geoshape] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_geoshape(geoPointField)', []); }); describe('to_integer', () => { @@ -4964,6 +7906,57 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_integer(stringField)', []); + testErrorsAndWarnings('row var = to_integer(true)', []); + testErrorsAndWarnings('row to_integer(true)', []); + testErrorsAndWarnings('row var = to_int(true)', []); + testErrorsAndWarnings('row var = to_integer(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_integer(5)', []); + testErrorsAndWarnings('row to_integer(5)', []); + testErrorsAndWarnings('row var = to_int(5)', []); + testErrorsAndWarnings('row var = to_integer(to_integer(true))', []); + testErrorsAndWarnings('row var = to_integer(now())', []); + testErrorsAndWarnings('row to_integer(now())', []); + testErrorsAndWarnings('row var = to_int(now())', []); + testErrorsAndWarnings('row var = to_integer(to_datetime(now()))', []); + testErrorsAndWarnings('row var = to_integer(to_string(true))', []); + + testErrorsAndWarnings('row var = to_integer(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_integer] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where to_integer(booleanField) > 0', []); + + testErrorsAndWarnings('from a_index | where to_integer(cartesianPointField) > 0', [ + 'Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where to_integer(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where to_integer(stringField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_integer(cartesianPointField)', [ + 'Argument of [to_integer] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_integer(numberField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_integer(booleanField, extraArg)', [ + 'Error: [to_integer] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_integer(booleanField)', []); }); describe('to_ip', () => { @@ -4977,6 +7970,30 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_ip(stringField)', []); + testErrorsAndWarnings('row var = to_ip(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row to_ip(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = to_ip(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = to_ip(to_string(true))', []); + + testErrorsAndWarnings('row var = to_ip(true)', [ + 'Argument of [to_ip] must be [ip], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_ip(ipField)', []); + testErrorsAndWarnings('from a_index | eval to_ip(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ip(to_ip(ipField))', []); + + testErrorsAndWarnings('from a_index | eval to_ip(booleanField)', [ + 'Argument of [to_ip] must be [ip], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_ip(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_ip(ipField, extraArg)', [ + 'Error: [to_ip] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_ip(ipField)', []); }); describe('to_long', () => { @@ -4990,6 +8007,51 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_long(stringField)', []); + testErrorsAndWarnings('row var = to_long(true)', []); + testErrorsAndWarnings('row to_long(true)', []); + testErrorsAndWarnings('row var = to_long(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_long(5)', []); + testErrorsAndWarnings('row to_long(5)', []); + testErrorsAndWarnings('row var = to_long(to_integer(true))', []); + testErrorsAndWarnings('row var = to_long(now())', []); + testErrorsAndWarnings('row to_long(now())', []); + testErrorsAndWarnings('row var = to_long(to_datetime(now()))', []); + testErrorsAndWarnings('row var = to_long(to_string(true))', []); + + testErrorsAndWarnings('row var = to_long(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_long] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where to_long(booleanField) > 0', []); + + testErrorsAndWarnings('from a_index | where to_long(cartesianPointField) > 0', [ + 'Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where to_long(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where to_long(stringField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_boolean(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_long(cartesianPointField)', [ + 'Argument of [to_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_long(numberField)', []); + testErrorsAndWarnings('from a_index | eval to_long(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_long(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_long(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = to_long(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_long(booleanField, extraArg)', [ + 'Error: [to_long] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_long(booleanField)', []); }); describe('to_lower', () => { @@ -5024,6 +8086,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_lower(stringField)', []); + testErrorsAndWarnings('row var = to_lower(to_string(true))', []); + + testErrorsAndWarnings('row var = to_lower(true)', [ + 'Argument of [to_lower] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where length(to_lower(booleanField)) > 0', [ + 'Argument of [to_lower] must be [string], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_lower(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_lower(booleanField)', [ + 'Argument of [to_lower] must be [string], found value [booleanField] type [boolean]', + ]); }); describe('to_radians', () => { @@ -5058,6 +8135,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_radians(numberField)', []); + testErrorsAndWarnings('row var = to_radians(to_integer(true))', []); + + testErrorsAndWarnings('row var = to_radians(true)', [ + 'Argument of [to_radians] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where to_radians(booleanField) > 0', [ + 'Argument of [to_radians] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_radians(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_radians(booleanField)', [ + 'Argument of [to_radians] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('to_string', () => { @@ -5073,6 +8165,128 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_string(stringField)', []); + testErrorsAndWarnings('row var = to_string(true)', []); + testErrorsAndWarnings('row to_string(true)', []); + testErrorsAndWarnings('row var = to_str(true)', []); + testErrorsAndWarnings('row var = to_string(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_string(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_string(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_str(to_cartesianpoint("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = to_string(to_cartesianpoint(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = to_string(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_string(to_cartesianshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_str(to_cartesianshape("POINT (30 10)"))', []); + + testErrorsAndWarnings( + 'row var = to_string(to_cartesianshape(to_cartesianpoint("POINT (30 10)")))', + [] + ); + + testErrorsAndWarnings('row var = to_string(now())', []); + testErrorsAndWarnings('row to_string(now())', []); + testErrorsAndWarnings('row var = to_str(now())', []); + testErrorsAndWarnings('row var = to_string(to_datetime(now()))', []); + testErrorsAndWarnings('row var = to_string(5)', []); + testErrorsAndWarnings('row to_string(5)', []); + testErrorsAndWarnings('row var = to_str(5)', []); + testErrorsAndWarnings('row var = to_string(to_integer(true))', []); + testErrorsAndWarnings('row var = to_string(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_string(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_str(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_string(to_geopoint(to_geopoint("POINT (30 10)")))', []); + testErrorsAndWarnings('row var = to_string(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row to_string(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_str(to_geoshape("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = to_string(to_geoshape(to_geopoint("POINT (30 10)")))', []); + testErrorsAndWarnings('row var = to_string(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row to_string(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = to_str(to_ip("127.0.0.1"))', []); + testErrorsAndWarnings('row var = to_string(to_ip(to_ip("127.0.0.1")))', []); + testErrorsAndWarnings('row var = to_string(to_string(true))', []); + testErrorsAndWarnings('row var = to_string(to_version("1.0.0"))', []); + testErrorsAndWarnings('row to_string(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = to_str(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = to_string(to_version("a"))', []); + testErrorsAndWarnings('from a_index | where length(to_string(booleanField)) > 0', []); + testErrorsAndWarnings( + 'from a_index | where length(to_string(cartesianPointField)) > 0', + [] + ); + testErrorsAndWarnings( + 'from a_index | where length(to_string(cartesianShapeField)) > 0', + [] + ); + testErrorsAndWarnings('from a_index | where length(to_string(dateField)) > 0', []); + testErrorsAndWarnings('from a_index | where length(to_string(numberField)) > 0', []); + testErrorsAndWarnings('from a_index | where length(to_string(geoPointField)) > 0', []); + testErrorsAndWarnings('from a_index | where length(to_string(geoShapeField)) > 0', []); + testErrorsAndWarnings('from a_index | where length(to_string(ipField)) > 0', []); + testErrorsAndWarnings('from a_index | where length(to_string(stringField)) > 0', []); + testErrorsAndWarnings('from a_index | where length(to_string(versionField)) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_string(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_string(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_boolean(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval to_string(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(cartesianPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_string(to_cartesianpoint(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = to_string(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval to_string(cartesianShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(cartesianShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = to_string(to_cartesianshape(cartesianPointField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval var = to_string(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_string(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_datetime(dateField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(numberField)', []); + testErrorsAndWarnings('from a_index | eval to_string(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_integer(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval to_string(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(geoPointField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_string(to_geopoint(geoPointField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_string(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval to_string(geoShapeField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(geoShapeField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_string(to_geoshape(geoPointField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_string(ipField)', []); + testErrorsAndWarnings('from a_index | eval to_string(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(ipField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_ip(ipField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_string(booleanField))', []); + testErrorsAndWarnings('from a_index | eval var = to_string(versionField)', []); + testErrorsAndWarnings('from a_index | eval to_string(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = to_string(to_version(stringField))', []); + + testErrorsAndWarnings('from a_index | eval to_string(booleanField, extraArg)', [ + 'Error: [to_string] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_string(booleanField)', []); }); describe('to_unsigned_long', () => { @@ -5090,6 +8304,75 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_unsigned_long(stringField)', []); + testErrorsAndWarnings('row var = to_unsigned_long(true)', []); + testErrorsAndWarnings('row to_unsigned_long(true)', []); + testErrorsAndWarnings('row var = to_ul(true)', []); + testErrorsAndWarnings('row var = to_ulong(true)', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_boolean(true))', []); + testErrorsAndWarnings('row var = to_unsigned_long(now())', []); + testErrorsAndWarnings('row to_unsigned_long(now())', []); + testErrorsAndWarnings('row var = to_ul(now())', []); + testErrorsAndWarnings('row var = to_ulong(now())', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_datetime(now()))', []); + testErrorsAndWarnings('row var = to_unsigned_long(5)', []); + testErrorsAndWarnings('row to_unsigned_long(5)', []); + testErrorsAndWarnings('row var = to_ul(5)', []); + testErrorsAndWarnings('row var = to_ulong(5)', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_integer(true))', []); + testErrorsAndWarnings('row var = to_unsigned_long(to_string(true))', []); + + testErrorsAndWarnings('row var = to_unsigned_long(to_cartesianpoint("POINT (30 10)"))', [ + 'Argument of [to_unsigned_long] must be [boolean], found value [to_cartesianpoint("POINT (30 10)")] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where to_unsigned_long(booleanField) > 0', []); + + testErrorsAndWarnings('from a_index | where to_unsigned_long(cartesianPointField) > 0', [ + 'Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | where to_unsigned_long(dateField) > 0', []); + testErrorsAndWarnings('from a_index | where to_unsigned_long(numberField) > 0', []); + testErrorsAndWarnings('from a_index | where to_unsigned_long(stringField) > 0', []); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(booleanField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(booleanField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_unsigned_long(to_boolean(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval to_unsigned_long(cartesianPointField)', [ + 'Argument of [to_unsigned_long] must be [boolean], found value [cartesianPointField] type [cartesian_point]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(dateField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(dateField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(dateField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_unsigned_long(to_datetime(dateField))', + [] + ); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(numberField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(numberField)', []); + testErrorsAndWarnings( + 'from a_index | eval var = to_unsigned_long(to_integer(booleanField))', + [] + ); + testErrorsAndWarnings( + 'from a_index | eval var = to_unsigned_long(to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval to_unsigned_long(booleanField, extraArg)', [ + 'Error: [to_unsigned_long] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_unsigned_long(booleanField)', []); }); describe('to_upper', () => { @@ -5124,6 +8407,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_upper(stringField)', []); + testErrorsAndWarnings('row var = to_upper(to_string(true))', []); + + testErrorsAndWarnings('row var = to_upper(true)', [ + 'Argument of [to_upper] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where length(to_upper(booleanField)) > 0', [ + 'Argument of [to_upper] must be [string], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_upper(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_upper(booleanField)', [ + 'Argument of [to_upper] must be [string], found value [booleanField] type [boolean]', + ]); }); describe('to_version', () => { @@ -5139,6 +8437,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort to_version(stringField)', []); + testErrorsAndWarnings('row var = to_version(to_version("1.0.0"))', []); + testErrorsAndWarnings('row to_version(to_version("1.0.0"))', []); + testErrorsAndWarnings('row var = to_ver(to_version("1.0.0"))', []); + + testErrorsAndWarnings('row var = to_version(true)', [ + 'Argument of [to_version] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_version(versionField)', []); + testErrorsAndWarnings('from a_index | eval to_version(versionField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ver(versionField)', []); + + testErrorsAndWarnings('from a_index | eval to_version(stringField, extraArg)', [ + 'Error: [to_version] function expects exactly one argument, got 2.', + ]); }); describe('trim', () => { @@ -5173,6 +8486,21 @@ describe('validation logic', () => { ]); testErrorsAndWarnings('from a_index | sort trim(stringField)', []); + testErrorsAndWarnings('row var = trim(to_string(true))', []); + + testErrorsAndWarnings('row var = trim(true)', [ + 'Argument of [trim] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where length(trim(booleanField)) > 0', [ + 'Argument of [trim] must be [string], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = trim(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval trim(booleanField)', [ + 'Argument of [trim] must be [string], found value [booleanField] type [boolean]', + ]); }); describe('avg', () => { @@ -5273,6 +8601,10 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval avg(numberField) > 0', [ 'EVAL does not support function avg', ]); + + testErrorsAndWarnings('from a_index | stats avg(booleanField)', [ + 'Argument of [avg] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('sum', () => { @@ -5373,6 +8705,10 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval sum(numberField) > 0', [ 'EVAL does not support function sum', ]); + + testErrorsAndWarnings('from a_index | stats sum(booleanField)', [ + 'Argument of [sum] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('median', () => { @@ -5479,6 +8815,10 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval median(numberField) > 0', [ 'EVAL does not support function median', ]); + + testErrorsAndWarnings('from a_index | stats median(booleanField)', [ + 'Argument of [median] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('median_absolute_deviation', () => { @@ -5620,6 +8960,10 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval median_absolute_deviation(numberField) > 0', [ 'EVAL does not support function median_absolute_deviation', ]); + + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(booleanField)', [ + 'Argument of [median_absolute_deviation] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('percentile', () => { @@ -5735,6 +9079,10 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval percentile(numberField, 5) > 0', [ 'EVAL does not support function percentile', ]); + + testErrorsAndWarnings('from a_index | stats percentile(booleanField, 5)', [ + 'Argument of [percentile] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('max', () => { @@ -5869,6 +9217,10 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval max(dateField) > 0', [ 'EVAL does not support function max', ]); + + testErrorsAndWarnings('from a_index | stats max(booleanField)', [ + 'Argument of [max] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('min', () => { @@ -6003,6 +9355,10 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval min(dateField) > 0', [ 'EVAL does not support function min', ]); + + testErrorsAndWarnings('from a_index | stats min(booleanField)', [ + 'Argument of [min] must be [number], found value [booleanField] type [boolean]', + ]); }); describe('count', () => { @@ -6186,6 +9542,10 @@ describe('validation logic', () => { testErrorsAndWarnings('from a_index | eval st_centroid_agg(geoPointField) > 0', [ 'EVAL does not support function st_centroid_agg', ]); + + testErrorsAndWarnings('from a_index | stats st_centroid_agg(booleanField)', [ + 'Argument of [st_centroid_agg] must be [cartesian_point], found value [booleanField] type [boolean]', + ]); }); describe('values', () => { @@ -6296,6 +9656,191 @@ describe('validation logic', () => { 'SORT does not support function bucket', ]); }); + + describe('cbrt', () => { + testErrorsAndWarnings('row var = cbrt(5)', []); + testErrorsAndWarnings('row cbrt(5)', []); + testErrorsAndWarnings('row var = cbrt(to_integer(true))', []); + + testErrorsAndWarnings('row var = cbrt(true)', [ + 'Argument of [cbrt] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where cbrt(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where cbrt(booleanField) > 0', [ + 'Argument of [cbrt] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = cbrt(numberField)', []); + testErrorsAndWarnings('from a_index | eval cbrt(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = cbrt(to_integer(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval cbrt(booleanField)', [ + 'Argument of [cbrt] must be [number], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = cbrt(*)', [ + 'Using wildcards (*) in cbrt is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval cbrt(numberField, extraArg)', [ + 'Error: [cbrt] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort cbrt(numberField)', []); + }); + + describe('from_base64', () => { + testErrorsAndWarnings('row var = from_base64("a")', []); + testErrorsAndWarnings('row from_base64("a")', []); + testErrorsAndWarnings('row var = from_base64(to_string(true))', []); + + testErrorsAndWarnings('row var = from_base64(true)', [ + 'Argument of [from_base64] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where length(from_base64(stringField)) > 0', []); + + testErrorsAndWarnings('from a_index | where length(from_base64(booleanField)) > 0', [ + 'Argument of [from_base64] must be [string], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = from_base64(stringField)', []); + testErrorsAndWarnings('from a_index | eval from_base64(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = from_base64(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval from_base64(booleanField)', [ + 'Argument of [from_base64] must be [string], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = from_base64(*)', [ + 'Using wildcards (*) in from_base64 is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval from_base64(stringField, extraArg)', [ + 'Error: [from_base64] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort from_base64(stringField)', []); + }); + + describe('locate', () => { + testErrorsAndWarnings('row var = locate("a", "a")', []); + testErrorsAndWarnings('row locate("a", "a")', []); + testErrorsAndWarnings('row var = locate(to_string(true), to_string(true))', []); + testErrorsAndWarnings('row var = locate("a", "a", 5)', []); + testErrorsAndWarnings('row locate("a", "a", 5)', []); + testErrorsAndWarnings( + 'row var = locate(to_string(true), to_string(true), to_integer(true))', + [] + ); + + testErrorsAndWarnings('row var = locate(true, true, true)', [ + 'Argument of [locate] must be [string], found value [true] type [boolean]', + 'Argument of [locate] must be [string], found value [true] type [boolean]', + 'Argument of [locate] must be [number], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where locate(stringField, stringField) > 0', []); + + testErrorsAndWarnings('from a_index | where locate(booleanField, booleanField) > 0', [ + 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', + 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | where locate(stringField, stringField, numberField) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where locate(booleanField, booleanField, booleanField) > 0', + [ + 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', + 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', + 'Argument of [locate] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings('from a_index | eval var = locate(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval locate(stringField, stringField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = locate(to_string(booleanField), to_string(booleanField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval locate(booleanField, booleanField)', [ + 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', + 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = locate(stringField, stringField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval locate(stringField, stringField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = locate(to_string(booleanField), to_string(booleanField), to_integer(booleanField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval locate(booleanField, booleanField, booleanField)', + [ + 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', + 'Argument of [locate] must be [string], found value [booleanField] type [boolean]', + 'Argument of [locate] must be [number], found value [booleanField] type [boolean]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval locate(stringField, stringField, numberField, extraArg)', + ['Error: [locate] function expects no more than 3 arguments, got 4.'] + ); + + testErrorsAndWarnings('from a_index | sort locate(stringField, stringField)', []); + }); + + describe('to_base64', () => { + testErrorsAndWarnings('row var = to_base64("a")', []); + testErrorsAndWarnings('row to_base64("a")', []); + testErrorsAndWarnings('row var = to_base64(to_string(true))', []); + + testErrorsAndWarnings('row var = to_base64(true)', [ + 'Argument of [to_base64] must be [string], found value [true] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | where length(to_base64(stringField)) > 0', []); + + testErrorsAndWarnings('from a_index | where length(to_base64(booleanField)) > 0', [ + 'Argument of [to_base64] must be [string], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_base64(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_base64(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = to_base64(to_string(booleanField))', []); + + testErrorsAndWarnings('from a_index | eval to_base64(booleanField)', [ + 'Argument of [to_base64] must be [string], found value [booleanField] type [boolean]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_base64(*)', [ + 'Using wildcards (*) in to_base64 is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval to_base64(stringField, extraArg)', [ + 'Error: [to_base64] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort to_base64(stringField)', []); + }); }); }); diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts index 5bef4d5faa604..1bc4121d729a2 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.ts @@ -70,7 +70,8 @@ import { retrievePoliciesFields, retrieveFieldsFromStringSources, } from './resources'; -import { collapseWrongArgumentTypeMessages } from './helpers'; +import { collapseWrongArgumentTypeMessages, getMaxMinNumberOfParams } from './helpers'; +import { getParamAtPosition } from '../autocomplete/helper'; import { METADATA_FIELDS } from '../shared/constants'; function validateFunctionLiteralArg( @@ -346,35 +347,28 @@ function validateFunction( } const matchingSignatures = extractCompatibleSignaturesForFunction(fnDefinition, astFunction); if (!matchingSignatures.length) { - const refSignature = fnDefinition.signatures[0]; - const numArgs = - refSignature.minParams ?? refSignature.params.filter(({ optional }) => !optional).length; - if ( - !refSignature.minParams && - refSignature.params.filter(({ optional }) => !optional).length === refSignature.params.length - ) { + const { max, min } = getMaxMinNumberOfParams(fnDefinition); + if (max === min) { messages.push( getMessageFromId({ messageId: 'wrongArgumentNumber', values: { fn: astFunction.name, - numArgs: - refSignature.minParams ?? - refSignature.params.filter(({ optional }) => !optional).length, + numArgs: max, passedArgs: astFunction.args.length, }, locations: astFunction.location, }) ); - } else if (Math.max(astFunction.args.length - refSignature.params.length, 0) > 0) { + } else if (astFunction.args.length > max) { messages.push( getMessageFromId({ messageId: 'wrongArgumentNumberTooMany', values: { fn: astFunction.name, - numArgs: refSignature.params.length, + numArgs: max, passedArgs: astFunction.args.length, - extraArgs: Math.max(astFunction.args.length - refSignature.params.length, 0), + extraArgs: astFunction.args.length - max, }, locations: astFunction.location, }) @@ -385,9 +379,9 @@ function validateFunction( messageId: 'wrongArgumentNumberTooFew', values: { fn: astFunction.name, - numArgs, + numArgs: min, passedArgs: astFunction.args.length, - missingArgs: Math.max(numArgs - astFunction.args.length, 0), + missingArgs: min - astFunction.args.length, }, locations: astFunction.location, }) @@ -461,9 +455,9 @@ function validateFunction( const failingSignatures: ESQLMessage[][] = []; for (const signature of matchingSignatures) { const failingSignature: ESQLMessage[] = []; - signature.params.forEach((argDef, index) => { - const outerArg = astFunction.args[index]!; - if (!outerArg && argDef.optional) { + astFunction.args.forEach((outerArg, index) => { + const argDef = getParamAtPosition(signature, index); + if ((!outerArg && argDef?.optional) || !argDef) { // that's ok, just skip it // the else case is already catched with the argument counts check // few lines above diff --git a/packages/kbn-esql-validation-autocomplete/tsconfig.json b/packages/kbn-esql-validation-autocomplete/tsconfig.json index 59bed1b2893f0..3c87e005c394f 100644 --- a/packages/kbn-esql-validation-autocomplete/tsconfig.json +++ b/packages/kbn-esql-validation-autocomplete/tsconfig.json @@ -14,6 +14,7 @@ "kbn_references": [ "@kbn/i18n", "@kbn/esql-ast", + "@kbn/utility-types", ], "exclude": [ "target/**/*", diff --git a/packages/kbn-search-connectors/lib/cancel_syncs.test.ts b/packages/kbn-search-connectors/lib/cancel_syncs.test.ts index 05c2f5fcd529d..0fd769099a155 100644 --- a/packages/kbn-search-connectors/lib/cancel_syncs.test.ts +++ b/packages/kbn-search-connectors/lib/cancel_syncs.test.ts @@ -8,84 +8,57 @@ import { ElasticsearchClient } from '@kbn/core/server'; -import { CONNECTORS_INDEX, CONNECTORS_JOBS_INDEX } from '..'; import { SyncStatus } from '../types/connectors'; import { cancelSyncs } from './cancel_syncs'; +import { fetchSyncJobs } from './fetch_sync_jobs'; + +jest.mock('./fetch_sync_jobs', () => ({ + fetchSyncJobs: jest.fn(), +})); describe('cancelSync lib function', () => { const mockClient = { - update: jest.fn(), - updateByQuery: jest.fn(), + transport: { + request: jest.fn(), + }, }; beforeEach(() => { jest.clearAllMocks(); - const now = new Date('2022-05-22T10:10:11.111Z'); - jest.spyOn(Date, 'now').mockImplementation(() => now.getTime()); }); - it('should call updateByQuery to cancel syncs', async () => { - mockClient.updateByQuery.mockImplementation(() => ({ _id: 'fakeId' })); + it('should call /_cancel endpoint to cancel syncs', async () => { + (fetchSyncJobs as jest.Mock) + .mockResolvedValueOnce({ + data: [{ id: 'job_1' }, { id: 'job_2' }], + }) + .mockResolvedValueOnce({ data: [] }) + .mockResolvedValueOnce({ data: [{ id: 'job_3' }] }); await expect( cancelSyncs(mockClient as unknown as ElasticsearchClient, 'connectorId') ).resolves.toEqual(undefined); - expect(mockClient.updateByQuery).toHaveBeenCalledTimes(2); - expect(mockClient.updateByQuery).toHaveBeenCalledWith({ - index: CONNECTORS_JOBS_INDEX, - query: { - bool: { - must: [ - { - term: { - 'connector.id': 'connectorId', - }, - }, - { - terms: { - status: [SyncStatus.PENDING, SyncStatus.SUSPENDED], - }, - }, - ], - }, - }, - script: { - lang: 'painless', - source: `ctx._source['status'] = '${SyncStatus.CANCELED}'; -ctx._source['cancelation_requested_at'] = '${new Date(Date.now()).toISOString()}'; -ctx._source['canceled_at'] = '${new Date(Date.now()).toISOString()}'; -ctx._source['completed_at'] = '${new Date(Date.now()).toISOString()}';`, - }, + expect(fetchSyncJobs).toHaveBeenCalledTimes(3); + expect(mockClient.transport.request).toHaveBeenCalledWith({ + method: 'PUT', + path: '/_connector/_sync_job/job_1/_cancel', }); - expect(mockClient.updateByQuery).toHaveBeenCalledWith({ - index: CONNECTORS_JOBS_INDEX, - query: { - bool: { - must: [ - { - term: { - 'connector.id': 'connectorId', - }, - }, - { - terms: { - status: [SyncStatus.IN_PROGRESS], - }, - }, - ], - }, - }, - script: { - lang: 'painless', - source: `ctx._source['status'] = '${SyncStatus.CANCELING}'; -ctx._source['cancelation_requested_at'] = '${new Date(Date.now()).toISOString()}';`, - }, + expect(mockClient.transport.request).toHaveBeenCalledWith({ + method: 'PUT', + path: '/_connector/_sync_job/job_2/_cancel', + }); + expect(mockClient.transport.request).toHaveBeenCalledWith({ + method: 'PUT', + path: '/_connector/_sync_job/job_3/_cancel', }); - await expect(mockClient.update).toHaveBeenCalledWith({ - doc: { last_sync_status: SyncStatus.CANCELED, sync_now: false }, - id: 'connectorId', - index: CONNECTORS_INDEX, + await expect(mockClient.transport.request).toHaveBeenCalledWith({ + method: 'PUT', + path: '/_connector/connectorId/_last_sync', + body: { + last_access_control_sync_status: SyncStatus.CANCELED, + last_sync_status: SyncStatus.CANCELED, + }, }); }); }); diff --git a/packages/kbn-search-connectors/lib/cancel_syncs.ts b/packages/kbn-search-connectors/lib/cancel_syncs.ts index c706dd7d311e3..df66ceee5864e 100644 --- a/packages/kbn-search-connectors/lib/cancel_syncs.ts +++ b/packages/kbn-search-connectors/lib/cancel_syncs.ts @@ -7,75 +7,31 @@ */ import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; +import { asyncForEach } from '@kbn/std'; -import { CONNECTORS_INDEX, CONNECTORS_JOBS_INDEX } from '..'; +import { fetchSyncJobs, cancelSync } from '..'; import { SyncStatus } from '../types/connectors'; -import { isIndexNotFoundException } from '../utils/identify_exceptions'; export const cancelSyncs = async ( client: ElasticsearchClient, connectorId: string ): Promise => { - try { - await client.updateByQuery({ - index: CONNECTORS_JOBS_INDEX, - query: { - bool: { - must: [ - { - term: { - 'connector.id': connectorId, - }, - }, - { - terms: { - status: [SyncStatus.PENDING, SyncStatus.SUSPENDED], - }, - }, - ], - }, - }, - script: { - lang: 'painless', - source: `ctx._source['status'] = '${SyncStatus.CANCELED}'; -ctx._source['cancelation_requested_at'] = '${new Date(Date.now()).toISOString()}'; -ctx._source['canceled_at'] = '${new Date(Date.now()).toISOString()}'; -ctx._source['completed_at'] = '${new Date(Date.now()).toISOString()}';`, - }, - }); - await client.updateByQuery({ - index: CONNECTORS_JOBS_INDEX, - query: { - bool: { - must: [ - { - term: { - 'connector.id': connectorId, - }, - }, - { - terms: { - status: [SyncStatus.IN_PROGRESS], - }, - }, - ], - }, - }, - script: { - lang: 'painless', - source: `ctx._source['status'] = '${SyncStatus.CANCELING}'; -ctx._source['cancelation_requested_at'] = '${new Date(Date.now()).toISOString()}';`, - }, - }); - await client.update({ - doc: { last_sync_status: SyncStatus.CANCELED, sync_now: false }, - id: connectorId, - index: CONNECTORS_INDEX, - }); - } catch (error) { - if (isIndexNotFoundException(error)) { - return; + await asyncForEach( + [SyncStatus.PENDING, SyncStatus.IN_PROGRESS, SyncStatus.SUSPENDED], + async (status) => { + const syncJobsToCancel = await fetchSyncJobs(client, connectorId, 0, 1000, 'all', status); + await asyncForEach(syncJobsToCancel.data, async (syncJob) => { + await cancelSync(client, syncJob.id); + }); } - throw error; - } + ); + + return await client.transport.request({ + method: 'PUT', + path: `/_connector/${connectorId}/_last_sync`, + body: { + last_access_control_sync_status: SyncStatus.CANCELED, + last_sync_status: SyncStatus.CANCELED, + }, + }); }; diff --git a/packages/kbn-search-connectors/lib/fetch_sync_jobs.test.ts b/packages/kbn-search-connectors/lib/fetch_sync_jobs.test.ts index c22b2ab19eef9..248c163f5dadb 100644 --- a/packages/kbn-search-connectors/lib/fetch_sync_jobs.test.ts +++ b/packages/kbn-search-connectors/lib/fetch_sync_jobs.test.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import { SyncStatus } from '../types'; import { fetchSyncJobs } from './fetch_sync_jobs'; describe('fetchSyncJobs lib', () => { @@ -41,5 +42,30 @@ describe('fetchSyncJobs lib', () => { querystring: 'from=0&size=10&connector_id=id&job_type=full,incremental', }); }); + + it('should fetch sync jobs by status', async () => { + mockClient.transport.request.mockImplementationOnce(() => ({ + count: 22, + results: [], + })); + await expect( + fetchSyncJobs(mockClient as any, 'id', 0, 10, 'content', SyncStatus.IN_PROGRESS) + ).resolves.toEqual({ + _meta: { + page: { + from: 0, + has_more_hits_than_total: true, + size: 10, + total: 22, + }, + }, + data: [], + }); + expect(mockClient.transport.request).toHaveBeenCalledWith({ + method: 'GET', + path: '/_connector/_sync_job', + querystring: 'from=0&size=10&connector_id=id&job_type=full,incremental&status=in_progress', + }); + }); }); }); diff --git a/packages/kbn-search-connectors/lib/fetch_sync_jobs.ts b/packages/kbn-search-connectors/lib/fetch_sync_jobs.ts index d278c97c84f6b..fec6be0cc7eb2 100644 --- a/packages/kbn-search-connectors/lib/fetch_sync_jobs.ts +++ b/packages/kbn-search-connectors/lib/fetch_sync_jobs.ts @@ -9,7 +9,7 @@ import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import { ConnectorsAPISyncJobResponse } from '..'; -import { ConnectorSyncJob } from '../types/connectors'; +import { ConnectorSyncJob, SyncStatus } from '../types/connectors'; import { Paginate } from '../types/pagination'; export const fetchSyncJobs = async ( @@ -17,13 +17,14 @@ export const fetchSyncJobs = async ( connectorId?: string, from: number = 0, size: number = 100, - syncJobType: 'content' | 'access_control' | 'all' = 'all' + syncJobType: 'content' | 'access_control' | 'all' = 'all', + syncStatus?: SyncStatus ): Promise> => { const querystring = `from=${from}&size=${size}${ connectorId ? '&connector_id=' + connectorId : '' }${syncJobType === 'content' ? '&job_type=full,incremental' : ''}${ syncJobType === 'access_control' ? '&job_type=access_control' : '' - }`; + }${syncStatus ? '&status=' + syncStatus : ''}`; const result = await client.transport.request({ method: 'GET', path: `/_connector/_sync_job`, diff --git a/packages/kbn-search-connectors/tsconfig.json b/packages/kbn-search-connectors/tsconfig.json index eb7decb3d1e00..cb54e57748e94 100644 --- a/packages/kbn-search-connectors/tsconfig.json +++ b/packages/kbn-search-connectors/tsconfig.json @@ -24,5 +24,6 @@ "@kbn/config-schema", "@kbn/i18n-react", "@kbn/test-jest-helpers", + "@kbn/std", ] } diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index 08c1c039d5e79..1de50f0547b35 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -149,7 +149,7 @@ describe('checking migration metadata changes on all registered SO types', () => "siem-ui-timeline-pinned-event": "082daa3ce647b33873f6abccf340bdfa32057c8d", "slo": "9a9995e4572de1839651c43b5fc4dc8276bb5815", "slo-settings": "f6b5ed339470a6a2cda272bde1750adcf504a11b", - "space": "8de4ec513e9bbc6b2f1d635161d850be7747d38e", + "space": "d38fa4bc669b9b1d6ec86aac2983d4c6675723ed", "spaces-usage-stats": "3abca98713c52af8b30300e386c7779b3025a20e", "synthetics-monitor": "5ceb25b6249bd26902c9b34273c71c3dce06dbea", "synthetics-param": "3ebb744e5571de678b1312d5c418c8188002cf5e", diff --git a/src/core/server/integration_tests/saved_objects/migrations/group3/migration_from_older_v1.test.ts b/src/core/server/integration_tests/saved_objects/migrations/group3/migration_from_older_v1.test.ts index 8a4b584f34d84..186a90e47da71 100644 --- a/src/core/server/integration_tests/saved_objects/migrations/group3/migration_from_older_v1.test.ts +++ b/src/core/server/integration_tests/saved_objects/migrations/group3/migration_from_older_v1.test.ts @@ -15,6 +15,7 @@ import { Env } from '@kbn/config'; import { getEnvOptions } from '@kbn/config-mocks'; import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; import type { SavedObjectsRawDoc } from '@kbn/core-saved-objects-server'; +import { modelVersionToVirtualVersion } from '@kbn/core-saved-objects-base-server-internal'; import { createTestServers, createRootWithCorePlugins, @@ -125,7 +126,7 @@ describe('migrating from 7.3.0-xpack which used v1 migrations', () => { .getTypeRegistry() .getAllTypes() .reduce((versionMap, type) => { - const { name, migrations, convertToMultiNamespaceTypeVersion } = type; + const { name, migrations, convertToMultiNamespaceTypeVersion, modelVersions } = type; if (migrations || convertToMultiNamespaceTypeVersion) { const migrationsMap = typeof migrations === 'function' ? migrations() : migrations; const migrationsKeys = migrationsMap ? Object.keys(migrationsMap) : []; @@ -133,6 +134,16 @@ describe('migrating from 7.3.0-xpack which used v1 migrations', () => { // Setting this option registers a conversion migration that is reflected in the object's `typeMigrationVersions` field migrationsKeys.push(convertToMultiNamespaceTypeVersion); } + + const modelVersionCreateSchemas = + typeof modelVersions === 'function' ? modelVersions() : modelVersions ?? {}; + + Object.entries(modelVersionCreateSchemas).forEach(([key, modelVersion]) => { + if (modelVersion.schemas?.create) { + migrationsKeys.push(modelVersionToVirtualVersion(key)); + } + }); + const highestVersion = migrationsKeys.sort(Semver.compare).reverse()[0]; return { ...versionMap, diff --git a/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.tsx b/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.tsx index ed4f6ffad6a73..660e2c95bed2f 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.tsx +++ b/src/plugins/chart_expressions/expression_xy/public/components/xy_chart.tsx @@ -37,6 +37,7 @@ import { IconType } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { PaletteRegistry } from '@kbn/coloring'; import { RenderMode } from '@kbn/expressions-plugin/common'; +import { ESQL_TABLE_TYPE } from '@kbn/data-plugin/common'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import { EmptyPlaceholder, LegendToggle } from '@kbn/charts-plugin/public'; import { EventAnnotationServiceType } from '@kbn/event-annotation-plugin/public'; @@ -403,6 +404,7 @@ export function XYChart({ const defaultXScaleType = isTimeViz ? XScaleTypes.TIME : XScaleTypes.ORDINAL; const isHistogramViz = dataLayers.every((l) => l.isHistogram); + const isEsqlMode = dataLayers.some((l) => l.table?.meta?.type === ESQL_TABLE_TYPE); const hasBars = dataLayers.some((l) => l.seriesType === SeriesTypes.BAR); const { baseDomain: rawXDomain, extendedDomain: xDomain } = getXDomain( @@ -651,7 +653,12 @@ export function XYChart({ : undefined; const xAxisColumnIndex = table.columns.findIndex((el) => el.id === xAccessor); - const context: BrushEvent['data'] = { range: [min, max], table, column: xAxisColumnIndex }; + const context: BrushEvent['data'] = { + range: [min, max], + table, + column: xAxisColumnIndex, + ...(isEsqlMode ? { timeFieldName: table.columns[xAxisColumnIndex].name } : {}), + }; onSelectRange(context); }; @@ -779,7 +786,7 @@ export function XYChart({ formattedDatatables, xAxisFormatter, formatFactory, - interactive && !args.detailedTooltip + interactive && !args.detailedTooltip && !isEsqlMode )} customTooltip={ args.detailedTooltip @@ -855,8 +862,9 @@ export function XYChart({ allowBrushingLastHistogramBin={isTimeViz} rotation={shouldRotate ? 90 : 0} xDomain={xDomain} + // enable brushing only for time charts, for both ES|QL and DSL queries onBrushEnd={interactive ? (brushHandler as BrushEndListener) : undefined} - onElementClick={interactive ? clickHandler : undefined} + onElementClick={interactive && !isEsqlMode ? clickHandler : undefined} legendAction={ interactive ? getLegendAction( diff --git a/src/plugins/data/common/search/expressions/esql.ts b/src/plugins/data/common/search/expressions/esql.ts index 6c3929f201458..a4d546f349f37 100644 --- a/src/plugins/data/common/search/expressions/esql.ts +++ b/src/plugins/data/common/search/expressions/esql.ts @@ -22,7 +22,7 @@ import type { ESQLSearchReponse, ESQLSearchParams } from '@kbn/es-types'; import { ESQL_LATEST_VERSION } from '@kbn/esql-utils'; import { getEsQueryConfig } from '../../es_query'; import { getTime } from '../../query'; -import { ESQL_ASYNC_SEARCH_STRATEGY, KibanaContext } from '..'; +import { ESQL_ASYNC_SEARCH_STRATEGY, KibanaContext, ESQL_TABLE_TYPE } from '..'; import { UiSettingsCommon } from '../..'; type Input = KibanaContext | null; @@ -270,7 +270,7 @@ export const getEsqlFn = ({ getStartDependencies }: EsqlFnArguments) => { return { type: 'datatable', meta: { - type: 'es_ql', + type: ESQL_TABLE_TYPE, }, columns: allColumns, rows, diff --git a/src/plugins/data/common/search/strategies/esql_search/types.ts b/src/plugins/data/common/search/strategies/esql_search/types.ts index 7d69e8379a250..0ceb71db9d496 100644 --- a/src/plugins/data/common/search/strategies/esql_search/types.ts +++ b/src/plugins/data/common/search/strategies/esql_search/types.ts @@ -8,3 +8,4 @@ export const ESQL_SEARCH_STRATEGY = 'esql'; export const ESQL_ASYNC_SEARCH_STRATEGY = 'esql_async'; +export const ESQL_TABLE_TYPE = 'es_ql'; diff --git a/src/plugins/data/public/actions/filters/create_filters_from_range_select.test.ts b/src/plugins/data/public/actions/filters/create_filters_from_range_select.test.ts index bee22e07ab144..74cdb28d7400c 100644 --- a/src/plugins/data/public/actions/filters/create_filters_from_range_select.test.ts +++ b/src/plugins/data/public/actions/filters/create_filters_from_range_select.test.ts @@ -8,7 +8,10 @@ import moment from 'moment'; -import { createFiltersFromRangeSelectAction } from './create_filters_from_range_select'; +import { + createFiltersFromRangeSelectAction, + type RangeSelectDataContext, +} from './create_filters_from_range_select'; import { DataViewsContract } from '@kbn/data-views-plugin/common'; import { dataPluginMock } from '../../mocks'; @@ -20,12 +23,8 @@ import { RangeFilter } from '@kbn/es-query'; describe('brushEvent', () => { const DAY_IN_MS = 24 * 60 * 60 * 1000; const JAN_01_2014 = 1388559600000; - let baseEvent: { - table: any; - column: number; - range: number[]; - timeFieldName?: string; - }; + let baseEvent: RangeSelectDataContext; + let esqlEventContext: RangeSelectDataContext; const mockField = { name: 'time', @@ -82,6 +81,28 @@ describe('brushEvent', () => { }, range: [], }; + + esqlEventContext = { + column: 0, + query: { esql: 'FROM indexPatternId | limit 10' }, + table: { + type: 'datatable', + meta: { + type: 'es_ql', + }, + columns: [ + { + id: '1', + name: '1', + meta: { + type: 'date', + }, + }, + ], + rows: [], + }, + range: [], + }; }); test('should be a function', () => { @@ -197,4 +218,33 @@ describe('brushEvent', () => { } }); }); + + describe('handles an event for an ES_QL query', () => { + afterAll(() => { + esqlEventContext.range = []; + }); + + test('by ignoring the event when range does not span at least 2 values', async () => { + esqlEventContext.range = [JAN_01_2014]; + const filter = await createFiltersFromRangeSelectAction(esqlEventContext); + expect(filter).toEqual([]); + }); + + test('by creating a new filter', async () => { + const rangeBegin = JAN_01_2014; + const rangeEnd = rangeBegin + DAY_IN_MS; + esqlEventContext.range = [rangeBegin, rangeEnd]; + const filter = await createFiltersFromRangeSelectAction(esqlEventContext); + + expect(filter).toBeDefined(); + + if (filter.length) { + const rangeFilter = filter[0] as RangeFilter; + expect(rangeFilter.meta.index).toBeUndefined(); + expect(rangeFilter.query.range['1'].gte).toBe(moment(rangeBegin).toISOString()); + expect(rangeFilter.query.range['1'].lt).toBe(moment(rangeEnd).toISOString()); + expect(rangeFilter.query.range['1']).toHaveProperty('format', 'strict_date_optional_time'); + } + }); + }); }); diff --git a/src/plugins/data/public/actions/filters/create_filters_from_range_select.ts b/src/plugins/data/public/actions/filters/create_filters_from_range_select.ts index c3acc8b2a5106..c5a6d86e20fb2 100644 --- a/src/plugins/data/public/actions/filters/create_filters_from_range_select.ts +++ b/src/plugins/data/public/actions/filters/create_filters_from_range_select.ts @@ -9,18 +9,57 @@ import { last } from 'lodash'; import moment from 'moment'; import { Datatable } from '@kbn/expressions-plugin/common'; +import { type AggregateQuery, isOfAggregateQueryType } from '@kbn/es-query'; +import { DataViewField } from '@kbn/data-views-plugin/public'; import { buildRangeFilter, DataViewFieldBase, RangeFilterParams } from '@kbn/es-query'; import { getIndexPatterns, getSearchService } from '../../services'; import { AggConfigSerialized } from '../../../common/search/aggs'; import { mapAndFlattenFilters } from '../../query'; -interface RangeSelectDataContext { +export interface RangeSelectDataContext { table: Datatable; column: number; range: number[]; timeFieldName?: string; + query?: AggregateQuery; } +const getParameters = async (event: RangeSelectDataContext) => { + const column: Record = event.table.columns[event.column]; + // Handling of the ES|QL datatable + if (isOfAggregateQueryType(event.query)) { + const field = new DataViewField({ + name: column.name, + type: column.meta?.type ?? 'unknown', + esTypes: column.meta?.esType ? ([column.meta.esType] as string[]) : undefined, + searchable: true, + aggregatable: false, + }); + + return { + field, + indexPattern: undefined, + }; + } + if (column.meta && 'sourceParams' in column.meta) { + const { indexPatternId, ...aggConfigs } = column.meta.sourceParams; + const indexPattern = await getIndexPatterns().get(indexPatternId); + const aggConfigsInstance = getSearchService().aggs.createAggConfigs(indexPattern, [ + aggConfigs as AggConfigSerialized, + ]); + const aggConfig = aggConfigsInstance.aggs[0]; + const field: DataViewFieldBase = aggConfig.params.field; + return { + field, + indexPattern, + }; + } + return { + field: undefined, + indexPattern: undefined, + }; +}; + export async function createFiltersFromRangeSelectAction(event: RangeSelectDataContext) { const column: Record = event.table.columns[event.column]; @@ -28,13 +67,7 @@ export async function createFiltersFromRangeSelectAction(event: RangeSelectDataC return []; } - const { indexPatternId, ...aggConfigs } = column.meta.sourceParams; - const indexPattern = await getIndexPatterns().get(indexPatternId); - const aggConfigsInstance = getSearchService().aggs.createAggConfigs(indexPattern, [ - aggConfigs as AggConfigSerialized, - ]); - const aggConfig = aggConfigsInstance.aggs[0]; - const field: DataViewFieldBase = aggConfig.params.field; + const { field, indexPattern } = await getParameters(event); if (!field || event.range.length <= 1) { return []; @@ -57,6 +90,5 @@ export async function createFiltersFromRangeSelectAction(event: RangeSelectDataC if (isDate) { range.format = 'strict_date_optional_time'; } - return mapAndFlattenFilters([buildRangeFilter(field, range, indexPattern)]); } diff --git a/src/plugins/data/public/actions/select_range_action.ts b/src/plugins/data/public/actions/select_range_action.ts index 921273ff4abd9..e8a65b049fd44 100644 --- a/src/plugins/data/public/actions/select_range_action.ts +++ b/src/plugins/data/public/actions/select_range_action.ts @@ -6,6 +6,7 @@ * Side Public License, v 1. */ +import type { AggregateQuery } from '@kbn/es-query'; import { Datatable } from '@kbn/expressions-plugin/public'; import { UiActionsActionDefinition, UiActionsStart } from '@kbn/ui-actions-plugin/public'; import { APPLY_FILTER_TRIGGER } from '../triggers'; @@ -20,6 +21,7 @@ export interface SelectRangeActionContext { column: number; range: number[]; timeFieldName?: string; + query?: AggregateQuery; }; } diff --git a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.tsx index 68585d7faf5c0..1d24fdcd1aa81 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.tsx @@ -10,6 +10,7 @@ import React, { useCallback, useMemo } from 'react'; import { UnifiedHistogramContainer } from '@kbn/unified-histogram-plugin/public'; import { css } from '@emotion/react'; import useObservable from 'react-use/lib/useObservable'; +import { ESQL_TABLE_TYPE } from '@kbn/data-plugin/common'; import type { Datatable } from '@kbn/expressions-plugin/common'; import { useDiscoverHistogram } from './use_discover_histogram'; import { type DiscoverMainContentProps, DiscoverMainContent } from './discover_main_content'; @@ -61,6 +62,9 @@ export const DiscoverHistogramLayout = ({ type: 'datatable' as 'datatable', rows: datatable.result!.map((r) => r.raw), columns: datatable.esqlQueryColumns || [], + meta: { + type: ESQL_TABLE_TYPE, + }, }; } }, [datatable, isEsqlMode]); diff --git a/src/plugins/discover/public/application/main/hooks/use_esql_mode.ts b/src/plugins/discover/public/application/main/hooks/use_esql_mode.ts index a907b1e796c87..2f3c99763fb04 100644 --- a/src/plugins/discover/public/application/main/hooks/use_esql_mode.ts +++ b/src/plugins/discover/public/application/main/hooks/use_esql_mode.ts @@ -8,6 +8,7 @@ import { isEqual } from 'lodash'; import { isOfAggregateQueryType, getAggregateQueryMode } from '@kbn/es-query'; +import { hasTransformationalCommand } from '@kbn/esql-utils'; import { useCallback, useEffect, useRef } from 'react'; import type { DataViewsContract } from '@kbn/data-views-plugin/public'; import { switchMap } from 'rxjs'; @@ -17,9 +18,6 @@ import { getValidViewMode } from '../utils/get_valid_view_mode'; import { FetchStatus } from '../../types'; const MAX_NUM_OF_COLUMNS = 50; -// For ES|QL we want in case of the following commands to display a table view, otherwise display a document view -const TRANSFORMATIONAL_COMMANDS = ['stats', 'keep']; - /** * Hook to take care of ES|QL state transformations when a new result is returned * If necessary this is setting displayed columns and selected data view @@ -71,12 +69,9 @@ export function useEsqlMode({ const hasResults = Boolean(next.result?.length); let queryHasTransformationalCommands = false; if ('esql' in query) { - TRANSFORMATIONAL_COMMANDS.forEach((command: string) => { - if (query.esql.toLowerCase().includes(command)) { - queryHasTransformationalCommands = true; - return; - } - }); + if (hasTransformationalCommand(query.esql)) { + queryHasTransformationalCommands = true; + } } if (isEsqlQuery) { diff --git a/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx b/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx index 33a1b28c7d5b4..4401e90134ed5 100644 --- a/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx +++ b/src/plugins/unified_doc_viewer/public/components/doc_viewer_table/table.tsx @@ -174,7 +174,7 @@ export const DocViewerTable = ({ ); const fieldToItem = useCallback( - (field: string) => { + (field: string, isPinned: boolean) => { const fieldMapping = mapping(field); const displayName = fieldMapping?.displayName ?? field; const columnMeta = columnsMeta?.[field]; @@ -202,7 +202,7 @@ export const DocViewerTable = ({ fieldMapping, fieldType, scripted: Boolean(fieldMapping?.scripted), - pinned: pinnedFields.includes(displayName), + pinned: isPinned, onTogglePinned, }, value: { @@ -226,7 +226,6 @@ export const DocViewerTable = ({ columns, columnsMeta, flattened, - pinnedFields, onTogglePinned, fieldFormats, ] @@ -256,7 +255,7 @@ export const DocViewerTable = ({ } if (pinnedFields.includes(curFieldName)) { - acc.pinnedItems.push(fieldToItem(curFieldName)); + acc.pinnedItems.push(fieldToItem(curFieldName, true)); } else { const fieldMapping = mapping(curFieldName); if ( @@ -267,7 +266,7 @@ export const DocViewerTable = ({ ) ) { // filter only unpinned fields - acc.restItems.push(fieldToItem(curFieldName)); + acc.restItems.push(fieldToItem(curFieldName, false)); } } diff --git a/src/plugins/unified_histogram/public/layout/helpers.ts b/src/plugins/unified_histogram/public/layout/helpers.ts index 0f6e898163779..d65ddb7763d28 100644 --- a/src/plugins/unified_histogram/public/layout/helpers.ts +++ b/src/plugins/unified_histogram/public/layout/helpers.ts @@ -7,9 +7,8 @@ */ import { AggregateQuery } from '@kbn/es-query'; - -const TRANSFORMATIONAL_COMMANDS = ['stats', 'keep']; +import { hasTransformationalCommand } from '@kbn/esql-utils'; export const shouldDisplayHistogram = (query: AggregateQuery) => { - return !TRANSFORMATIONAL_COMMANDS.some((command) => query.esql.toLowerCase().includes(command)); + return !hasTransformationalCommand(query.esql); }; diff --git a/src/plugins/usage_collection/server/report/store_application_usage.test.ts b/src/plugins/usage_collection/server/report/store_application_usage.test.ts index 97028f3cc92f2..812e44ae54584 100644 --- a/src/plugins/usage_collection/server/report/store_application_usage.test.ts +++ b/src/plugins/usage_collection/server/report/store_application_usage.test.ts @@ -110,6 +110,7 @@ const expectedIncrementParams = ( viewId, timestamp: moment(`${moment(dayId).format('YYYY-MM-DD')}T00:00:00Z`).toISOString(), }, + refresh: false, }, ]; }; diff --git a/src/plugins/usage_collection/server/report/store_application_usage.ts b/src/plugins/usage_collection/server/report/store_application_usage.ts index 5add00a2704e3..60b02e113b9fd 100644 --- a/src/plugins/usage_collection/server/report/store_application_usage.ts +++ b/src/plugins/usage_collection/server/report/store_application_usage.ts @@ -73,6 +73,7 @@ const incrementUsageCounters = ( viewId, timestamp: getTimestamp(dayId), }, + refresh: false, } ); }; diff --git a/src/plugins/usage_collection/server/report/store_report.test.ts b/src/plugins/usage_collection/server/report/store_report.test.ts index b80c0eb6ab9ef..e1c33197142d9 100644 --- a/src/plugins/usage_collection/server/report/store_report.test.ts +++ b/src/plugins/usage_collection/server/report/store_report.test.ts @@ -76,6 +76,7 @@ describe('store_report', () => { Object { "id": "key-user-agent:test-user-agent", "overwrite": true, + "refresh": false, }, ], ] diff --git a/src/plugins/usage_collection/server/report/store_report.ts b/src/plugins/usage_collection/server/report/store_report.ts index 234bab7d7202c..40ea5cbf414a8 100644 --- a/src/plugins/usage_collection/server/report/store_report.ts +++ b/src/plugins/usage_collection/server/report/store_report.ts @@ -37,6 +37,7 @@ export async function storeReport( { id: savedObjectId, overwrite: true, + refresh: false, } ); }), diff --git a/test/plugin_functional/test_suites/core_plugins/rendering.ts b/test/plugin_functional/test_suites/core_plugins/rendering.ts index 62cffabc1b82c..25388c7829edd 100644 --- a/test/plugin_functional/test_suites/core_plugins/rendering.ts +++ b/test/plugin_functional/test_suites/core_plugins/rendering.ts @@ -293,6 +293,7 @@ export default function ({ getService }: PluginFunctionalProviderContext) { 'xpack.index_management.editableIndexSettings (any)', 'xpack.index_management.enableDataStreamsStorageColumn (any)', 'xpack.index_management.enableMappingsSourceFieldSection (any)', + 'xpack.index_management.dev.enableSemanticText (boolean)', 'xpack.license_management.ui.enabled (boolean)', 'xpack.maps.preserveDrawingBuffer (boolean)', 'xpack.maps.showMapsInspectorAdapter (boolean)', diff --git a/x-pack/plugins/actions/server/lib/action_executor.test.ts b/x-pack/plugins/actions/server/lib/action_executor.test.ts index 9b7773f1795d5..58e8b3a100ab0 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.test.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.test.ts @@ -25,7 +25,7 @@ import { finished } from 'stream/promises'; import { PassThrough } from 'stream'; import { SecurityConnectorFeatureId } from '../../common'; import { TaskErrorSource } from '@kbn/task-manager-plugin/common'; -import { getErrorSource } from '@kbn/task-manager-plugin/server/task_running'; +import { createTaskRunError, getErrorSource } from '@kbn/task-manager-plugin/server/task_running'; const actionExecutor = new ActionExecutor({ isESOCanEncrypt: true }); const services = actionsMock.createServices(); @@ -1199,6 +1199,35 @@ describe('Action Executor', () => { }); }); + test(`${label} logs warning captures source when executor throws error with error source`, async () => { + const err = createTaskRunError( + new Error('this action execution is intended to fail'), + TaskErrorSource.USER + ); + err.stack = 'foo error\n stack 1\n stack 2\n stack 3'; + connectorType.executor.mockRejectedValueOnce(err); + encryptedSavedObjectsClient.getDecryptedAsInternalUser.mockResolvedValueOnce( + connectorSavedObject + ); + connectorTypeRegistry.get.mockReturnValueOnce(connectorType); + + let executorResult; + if (executeUnsecure) { + executorResult = await actionExecutor.executeUnsecured(executeUnsecuredParams); + } else { + executorResult = await actionExecutor.execute(executeParams); + } + + expect(executorResult?.errorSource).toBe(TaskErrorSource.USER); + expect(loggerMock.warn).toBeCalledWith( + 'action execution failure: test:1: 1: an error occurred while running the action: this action execution is intended to fail; retry: true' + ); + expect(loggerMock.error).toBeCalledWith(err, { + error: { stack_trace: 'foo error\n stack 1\n stack 2\n stack 3' }, + tags: ['test', '1', 'action-run-failed'], + }); + }); + test(`${label} logs warning when executor returns invalid status`, async () => { connectorType.executor.mockResolvedValueOnce({ actionId: '1', diff --git a/x-pack/plugins/actions/server/lib/action_executor.ts b/x-pack/plugins/actions/server/lib/action_executor.ts index a15bd8b4c7c04..2db78f0d5058e 100644 --- a/x-pack/plugins/actions/server/lib/action_executor.ts +++ b/x-pack/plugins/actions/server/lib/action_executor.ts @@ -15,6 +15,7 @@ import { SpacesServiceStart } from '@kbn/spaces-plugin/server'; import { IEventLogger, SAVED_OBJECT_REL_PRIMARY } from '@kbn/event-log-plugin/server'; import { AuthenticatedUser, SecurityPluginStart } from '@kbn/security-plugin/server'; import { createTaskRunError, TaskErrorSource } from '@kbn/task-manager-plugin/server'; +import { getErrorSource } from '@kbn/task-manager-plugin/server/task_running'; import { getGenAiTokenTracking, shouldTrackGenAiToken } from './gen_ai_token_tracking'; import { validateConfig, @@ -507,6 +508,7 @@ export class ActionExecutor { rawResult.errorSource = TaskErrorSource.USER; } } catch (err) { + const errorSource = getErrorSource(err) || TaskErrorSource.FRAMEWORK; if (err.reason === ActionExecutionErrorReason.Authorization) { rawResult = err.result; } else { @@ -517,7 +519,7 @@ export class ActionExecutor { serviceMessage: err.message, error: err, retry: true, - errorSource: TaskErrorSource.FRAMEWORK, + errorSource, }; } } diff --git a/x-pack/plugins/cloud_security_posture/public/common/constants.ts b/x-pack/plugins/cloud_security_posture/public/common/constants.ts index a9bee587980f5..73934752e819a 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/constants.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/constants.ts @@ -234,8 +234,30 @@ export const DETECTION_ENGINE_ALERTS_KEY = 'detection_engine_alerts'; export const DEFAULT_GROUPING_TABLE_HEIGHT = 512; export const FINDINGS_GROUPING_OPTIONS = { + NONE: 'none', RESOURCE_NAME: 'resource.name', RULE_NAME: 'rule.name', + RULE_SECTION: 'rule.section', CLOUD_ACCOUNT_NAME: 'cloud.account.name', ORCHESTRATOR_CLUSTER_NAME: 'orchestrator.cluster.name', }; +export const VULNERABILITY_FIELDS = { + VULNERABILITY_ID: 'vulnerability.id', + SCORE_BASE: 'vulnerability.score.base', + RESOURCE_NAME: 'resource.name', + RESOURCE_ID: 'resource.id', + SEVERITY: 'vulnerability.severity', + PACKAGE_NAME: 'package.name', + PACKAGE_VERSION: 'package.version', + PACKAGE_FIXED_VERSION: 'package.fixed_version', + CLOUD_ACCOUNT_NAME: 'cloud.account.name', + CLOUD_PROVIDER: 'cloud.provider', + DESCRIPTION: 'vulnerability.description', +} as const; +export const VULNERABILITY_GROUPING_OPTIONS = { + NONE: 'none', + RESOURCE_NAME: VULNERABILITY_FIELDS.RESOURCE_NAME, + RESOURCE_ID: VULNERABILITY_FIELDS.RESOURCE_ID, + CLOUD_ACCOUNT_NAME: VULNERABILITY_FIELDS.CLOUD_ACCOUNT_NAME, + CVE: VULNERABILITY_FIELDS.VULNERABILITY_ID, +}; diff --git a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_navigate_findings.test.ts b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_navigate_findings.test.ts index 670664bf46ef7..a1b78852c06c9 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_navigate_findings.test.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_navigate_findings.test.ts @@ -6,11 +6,7 @@ */ import { renderHook, act } from '@testing-library/react-hooks/dom'; -import { - useNavigateFindings, - useNavigateFindingsByResource, - useNavigateVulnerabilities, -} from './use_navigate_findings'; +import { useNavigateFindings, useNavigateVulnerabilities } from './use_navigate_findings'; import { useHistory } from 'react-router-dom'; jest.mock('react-router-dom', () => ({ @@ -79,24 +75,6 @@ describe('useNavigateFindings', () => { expect(push).toHaveBeenCalledTimes(1); }); - it('creates a URL to findings resource page with correct path and filter', () => { - const push = jest.fn(); - (useHistory as jest.Mock).mockReturnValueOnce({ push }); - - const { result } = renderHook(() => useNavigateFindingsByResource()); - - act(() => { - result.current({ foo: 1 }); - }); - - expect(push).toHaveBeenCalledWith({ - pathname: '/cloud_security_posture/findings/resource', - search: - "cspq=(filters:!((meta:(alias:!n,disabled:!f,index:data-view-id,key:foo,negate:!f,type:phrase),query:(match_phrase:(foo:1)))),query:(language:kuery,query:''))", - }); - expect(push).toHaveBeenCalledTimes(1); - }); - it('creates a URL to vulnerabilities page with correct path, filter and dataViewId', () => { const push = jest.fn(); (useHistory as jest.Mock).mockReturnValueOnce({ push }); diff --git a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_navigate_findings.ts b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_navigate_findings.ts index 08d52a0cfe93f..633d280b0654f 100644 --- a/x-pack/plugins/cloud_security_posture/public/common/hooks/use_navigate_findings.ts +++ b/x-pack/plugins/cloud_security_posture/public/common/hooks/use_navigate_findings.ts @@ -81,13 +81,5 @@ export const useNavigateFindings = () => { return useNavigate(findingsNavigation.findings_default.path, data?.id); }; -export const useNavigateFindingsByResource = () => { - const { data } = useDataView(LATEST_FINDINGS_INDEX_PATTERN); - return useNavigate(findingsNavigation.findings_by_resource.path, data?.id); -}; - export const useNavigateVulnerabilities = () => useNavigate(findingsNavigation.vulnerabilities.path); - -export const useNavigateVulnerabilitiesByResource = () => - useNavigate(findingsNavigation.vulnerabilities_by_resource.path); diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx index 53ed78b6e9b78..ce60e2fcc2505 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/cloud_security_data_table.tsx @@ -77,6 +77,10 @@ export interface CloudSecurityDataTableProps { * Height override for the data grid. */ height?: number | string; + /** + * Specify if distribution bar is shown on data table, used to calculate height of data table in virtualized mode + */ + hasDistributionBar?: boolean; } export const CloudSecurityDataTable = ({ @@ -91,6 +95,7 @@ export const CloudSecurityDataTable = ({ customCellRenderer, groupSelectorComponent, height, + hasDistributionBar = true, ...rest }: CloudSecurityDataTableProps) => { const { @@ -171,6 +176,32 @@ export const CloudSecurityDataTable = ({ sort, }); + /** + * This object is used to determine if the table rendering will be virtualized and the virtualization wrapper height. + * mode should be passed as a key to the UnifiedDataTable component to force a re-render when the mode changes. + */ + const computeDataTableRendering = useMemo(() => { + // Enable virtualization mode when the table is set to a large page size. + const isVirtualizationEnabled = pageSize >= 100; + + const getWrapperHeight = () => { + if (height) return height; + + // If virtualization is not needed the table will render unconstrained. + if (!isVirtualizationEnabled) return 'auto'; + + const baseHeight = 362; // height of Kibana Header + Findings page header and search bar + const filterBarHeight = filters?.length > 0 ? 40 : 0; + const distributionBarHeight = hasDistributionBar ? 52 : 0; + return `calc(100vh - ${baseHeight}px - ${filterBarHeight}px - ${distributionBarHeight}px)`; + }; + + return { + wrapperHeight: getWrapperHeight(), + mode: isVirtualizationEnabled ? 'virtualized' : 'standard', + }; + }, [pageSize, height, filters?.length, hasDistributionBar]); + const onAddFilter: AddFieldFilterHandler | undefined = useMemo( () => filterManager && dataView @@ -229,13 +260,6 @@ export const CloudSecurityDataTable = ({ /> ); - const dataTableStyle = { - // Change the height of the grid to fit the page - // If there are filters, leave space for the filter bar - // Todo: Replace this component with EuiAutoSizer - height: height ?? `calc(100vh - ${filters?.length > 0 ? 454 : 414}px)`, - }; - const rowHeightState = 0; const loadingStyle = { @@ -250,10 +274,13 @@ export const CloudSecurityDataTable = ({
{ - navToFindings({ - ...getPolicyTemplateQuery(dashboardType), - ...getBenchmarkIdQuery(benchmark), - 'result.evaluation': evaluation, - }); + navToFindings( + { + ...getPolicyTemplateQuery(dashboardType), + ...getBenchmarkIdQuery(benchmark), + 'result.evaluation': evaluation, + }, + groupBy + ); }; const navToFailedFindingsByBenchmarkAndSection = ( @@ -73,16 +80,21 @@ export const BenchmarksSection = ({ ruleSection: string, resultEvaluation: 'passed' | 'failed' = RULE_FAILED ) => { - navToFindings({ - ...getPolicyTemplateQuery(dashboardType), - ...getBenchmarkIdQuery(benchmark), - 'rule.section': ruleSection, - 'result.evaluation': resultEvaluation, - }); + navToFindings( + { + ...getPolicyTemplateQuery(dashboardType), + ...getBenchmarkIdQuery(benchmark), + 'rule.section': ruleSection, + 'result.evaluation': resultEvaluation, + }, + [FINDINGS_GROUPING_OPTIONS.NONE] + ); }; const navToFailedFindingsByBenchmark = (benchmark: BenchmarkData) => { - navToFindingsByBenchmarkAndEvaluation(benchmark, RULE_FAILED); + navToFindingsByBenchmarkAndEvaluation(benchmark, RULE_FAILED, [ + FINDINGS_GROUPING_OPTIONS.RULE_SECTION, + ]); }; const toggleBenchmarkSortingDirection = () => { diff --git a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/summary_section.tsx b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/summary_section.tsx index a32d706cd774f..0f176171b82c0 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/summary_section.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/compliance_dashboard/dashboard_sections/summary_section.tsx @@ -35,6 +35,7 @@ import { RULE_PASSED, } from '../../../../common/constants'; import { AccountsEvaluatedWidget } from '../../../components/accounts_evaluated_widget'; +import { FINDINGS_GROUPING_OPTIONS } from '../../../common/constants'; export const dashboardColumnsGrow: Record = { first: 3, @@ -64,22 +65,29 @@ export const SummarySection = ({ const { euiTheme } = useEuiTheme(); const handleEvalCounterClick = (evaluation: Evaluation) => { - navToFindings({ 'result.evaluation': evaluation, ...getPolicyTemplateQuery(dashboardType) }); + navToFindings({ 'result.evaluation': evaluation, ...getPolicyTemplateQuery(dashboardType) }, [ + FINDINGS_GROUPING_OPTIONS.NONE, + ]); }; const handleCellClick = ( ruleSection: string, resultEvaluation: 'passed' | 'failed' = RULE_FAILED ) => { - navToFindings({ - ...getPolicyTemplateQuery(dashboardType), - 'rule.section': ruleSection, - 'result.evaluation': resultEvaluation, - }); + navToFindings( + { + ...getPolicyTemplateQuery(dashboardType), + 'rule.section': ruleSection, + 'result.evaluation': resultEvaluation, + }, + [FINDINGS_GROUPING_OPTIONS.NONE] + ); }; const handleViewAllClick = () => { - navToFindings({ 'result.evaluation': RULE_FAILED, ...getPolicyTemplateQuery(dashboardType) }); + navToFindings({ 'result.evaluation': RULE_FAILED, ...getPolicyTemplateQuery(dashboardType) }, [ + FINDINGS_GROUPING_OPTIONS.RULE_SECTION, + ]); }; const counters: CspCounterCardProps[] = useMemo( @@ -128,7 +136,9 @@ export const SummarySection = ({ { - navToFindings(getPolicyTemplateQuery(dashboardType)); + navToFindings(getPolicyTemplateQuery(dashboardType), [ + FINDINGS_GROUPING_OPTIONS.RESOURCE_NAME, + ]); }} > {i18n.translate( diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx index 673dc5df24315..e1580d9c87848 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_container.tsx @@ -98,7 +98,6 @@ export const LatestFindingsContainer = () => { ); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.tsx index 4f584028cc55d..07f42e83c5f5b 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/configurations/latest_findings/latest_findings_table.tsx @@ -90,6 +90,7 @@ export const LatestFindingsTable = ({ rows, error, isFetching, + isLoading, fetchNextPage, passed, failed, @@ -124,7 +125,7 @@ export const LatestFindingsTable = ({ )} ; type LatestFindingsResponse = IKibanaSearchResponse< diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities_grouping.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities_grouping.tsx index 76aa293c0ff44..00b5e80097ec5 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities_grouping.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities_grouping.tsx @@ -15,7 +15,11 @@ import { } from '@kbn/securitysolution-grouping/src'; import { useMemo } from 'react'; import { buildEsQuery, Filter } from '@kbn/es-query'; -import { LOCAL_STORAGE_VULNERABILITIES_GROUPING_KEY } from '../../../common/constants'; +import { + LOCAL_STORAGE_VULNERABILITIES_GROUPING_KEY, + VULNERABILITY_GROUPING_OPTIONS, + VULNERABILITY_FIELDS, +} from '../../../common/constants'; import { useDataViewContext } from '../../../common/contexts/data_view_context'; import { LATEST_VULNERABILITIES_RETENTION_POLICY, @@ -26,12 +30,7 @@ import { VulnerabilitiesRootGroupingAggregation, useGroupedVulnerabilities, } from './use_grouped_vulnerabilities'; -import { - defaultGroupingOptions, - getDefaultQuery, - GROUPING_OPTIONS, - VULNERABILITY_FIELDS, -} from '../constants'; +import { defaultGroupingOptions, getDefaultQuery } from '../constants'; import { useCloudSecurityGrouping } from '../../../components/cloud_security_grouping'; import { VULNERABILITIES_UNIT, groupingTitle, VULNERABILITIES_GROUPS_UNIT } from '../translations'; @@ -82,14 +81,14 @@ const getAggregationsByGroupField = (field: string): NamedAggregation[] => { ]; switch (field) { - case GROUPING_OPTIONS.RESOURCE_NAME: + case VULNERABILITY_GROUPING_OPTIONS.RESOURCE_NAME: return [...aggMetrics, getTermAggregation('resourceId', VULNERABILITY_FIELDS.RESOURCE_ID)]; - case GROUPING_OPTIONS.CLOUD_ACCOUNT_NAME: + case VULNERABILITY_GROUPING_OPTIONS.CLOUD_ACCOUNT_NAME: return [ ...aggMetrics, getTermAggregation('cloudProvider', VULNERABILITY_FIELDS.CLOUD_PROVIDER), ]; - case GROUPING_OPTIONS.CVE: + case VULNERABILITY_GROUPING_OPTIONS.CVE: return [...aggMetrics, getTermAggregation('description', VULNERABILITY_FIELDS.DESCRIPTION)]; } return aggMetrics; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/latest_vulnerabilities_container.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/latest_vulnerabilities_container.tsx index 6af307b79ad85..4a33228e00bab 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/latest_vulnerabilities_container.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/latest_vulnerabilities_container.tsx @@ -95,7 +95,6 @@ export const LatestVulnerabilitiesContainer = () => { ); } diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/latest_vulnerabilities_group_renderer.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/latest_vulnerabilities_group_renderer.tsx index 7de747b458b06..b8531491c42c0 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/latest_vulnerabilities_group_renderer.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/latest_vulnerabilities_group_renderer.tsx @@ -19,7 +19,6 @@ import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { getCloudProviderNameFromAbbreviation } from '../../../common/utils/helpers'; import { VulnerabilitiesGroupingAggregation } from './hooks/use_grouped_vulnerabilities'; -import { GROUPING_OPTIONS } from './constants'; import { VULNERABILITIES_GROUPING_COUNTER } from './test_subjects'; import { NULL_GROUPING_MESSAGES, NULL_GROUPING_UNIT, VULNERABILITIES } from './translations'; import { getAbbreviatedNumber } from '../../common/utils/get_abbreviated_number'; @@ -30,6 +29,7 @@ import { } from '../../components/cloud_security_grouping'; import { VulnerabilitySeverityMap } from '../../components/vulnerability_severity_map'; import { CloudProviderIcon } from '../../components/cloud_provider_icon'; +import { VULNERABILITY_GROUPING_OPTIONS } from '../../common/constants'; export const groupPanelRenderer: GroupPanelRenderer = ( selectedGroup, @@ -52,7 +52,7 @@ export const groupPanelRenderer: GroupPanelRenderer ); - case GROUPING_OPTIONS.CLOUD_ACCOUNT_NAME: + case VULNERABILITY_GROUPING_OPTIONS.CLOUD_ACCOUNT_NAME: return nullGroupMessage ? ( renderNullGroup(NULL_GROUPING_MESSAGES.CLOUD_ACCOUNT_NAME) ) : ( diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/latest_vulnerabilities_table.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/latest_vulnerabilities_table.tsx index b27ebfb459fe4..91217ea367170 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/latest_vulnerabilities_table.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/latest_vulnerabilities_table.tsx @@ -93,8 +93,6 @@ export const LatestVulnerabilitiesTable = ({ nonPersistedFilters, }); - const { filters } = cloudPostureDataTable; - return ( <> {error ? ( @@ -115,7 +113,8 @@ export const LatestVulnerabilitiesTable = ({ title={title} customCellRenderer={customCellRenderer} groupSelectorComponent={groupSelectorComponent} - height={height ?? `calc(100vh - ${filters?.length > 0 ? 404 : 364}px)`} + height={height} + hasDistributionBar={false} /> )} diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/translations.ts b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/translations.ts index 148ac551337d3..cc5392bd6da66 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/translations.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/translations.ts @@ -6,7 +6,8 @@ */ import { i18n } from '@kbn/i18n'; -import { GROUPING_OPTIONS } from './constants'; + +import { VULNERABILITY_GROUPING_OPTIONS } from '../../common/constants'; export const FILTER_IN = i18n.translate('xpack.csp.vulnerabilities.table.filterIn', { defaultMessage: 'Filter in', @@ -38,17 +39,17 @@ export const VULNERABILITIES_GROUPS_UNIT = ( const groupCount = hasNullGroup ? totalCount - 1 : totalCount; switch (selectedGroup) { - case GROUPING_OPTIONS.RESOURCE_NAME: + case VULNERABILITY_GROUPING_OPTIONS.RESOURCE_NAME: return i18n.translate('xpack.csp.vulnerabilities.groupUnit.resource', { values: { groupCount }, defaultMessage: `{groupCount} {groupCount, plural, =1 {resource} other {resources}}`, }); - case GROUPING_OPTIONS.CLOUD_ACCOUNT_NAME: + case VULNERABILITY_GROUPING_OPTIONS.CLOUD_ACCOUNT_NAME: return i18n.translate('xpack.csp.vulnerabilities.groupUnit.cloudAccount', { values: { groupCount }, defaultMessage: `{groupCount} {groupCount, plural, =1 {cloud account} other {cloud accounts}}`, }); - case GROUPING_OPTIONS.CVE: + case VULNERABILITY_GROUPING_OPTIONS.CVE: return i18n.translate('xpack.csp.vulnerabilities.groupUnit.cve', { values: { groupCount }, defaultMessage: `{groupCount} {groupCount, plural, =1 {CVE} other {CVEs}}`, diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel.config.ts b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel.config.ts index b0a4436bc6b8c..22856edb013c0 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel.config.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel.config.ts @@ -18,15 +18,30 @@ export const vulnerabilityDashboardTableContent = { title: i18n.translate('xpack.csp.cnvmDashboardTable.panel.topVulnerableResources.title', { defaultMessage: 'Top 10 vulnerable resources', }), + viewAllLinkText: i18n.translate( + 'xpack.csp.vulnerabilityTable.panel.allVulnerableResourcesLinkText', + { + defaultMessage: 'View all vulnerable resources', + } + ), }, [DASHBOARD_TABLE_TYPES.TOP_PATCH_VULNERABILITIES]: { title: i18n.translate('xpack.csp.cnvmDashboardTable.panel.topPatchVulnerabilities.title', { defaultMessage: 'Top 10 patchable vulnerabilities', }), + viewAllLinkText: i18n.translate( + 'xpack.csp.vulnerabilityTable.panel.allPatchableVulnerabilitiesLinkText', + { + defaultMessage: 'View all patchable vulnerabilities', + } + ), }, [DASHBOARD_TABLE_TYPES.TOP_VULNERABILITIES]: { title: i18n.translate('xpack.csp.cnvmDashboardTable.panel.topVulnerabilities.title', { defaultMessage: 'Top 10 vulnerabilities', }), + viewAllLinkText: i18n.translate('xpack.csp.vulnerabilityTable.panel.buttonText', { + defaultMessage: 'View all vulnerabilities', + }), }, }; diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel.tsx index 8906688efdae8..6fb0d1475ef28 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel.tsx @@ -15,7 +15,6 @@ import { EuiFlexGroup, EuiFlexItem, } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; import { css } from '@emotion/react'; import { DASHBOARD_TABLE_TYPES, @@ -37,7 +36,7 @@ export const VulnerabilityTablePanel = ({ onViewVulnerabilitiesClick, }: VulnerabilityDashboardTableProps) => { const { euiTheme } = useEuiTheme(); - const { title } = vulnerabilityDashboardTableContent[tableType]; + const { title, viewAllLinkText } = vulnerabilityDashboardTableContent[tableType]; return ( @@ -64,9 +63,7 @@ export const VulnerabilityTablePanel = ({ onClick={onViewVulnerabilitiesClick} size="s" > - {i18n.translate('xpack.csp.vulnerabilityTable.panel.buttonText', { - defaultMessage: 'View all vulnerabilities', - })} + {viewAllLinkText} diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel_section.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel_section.tsx index 1ba912b1d125b..f9a4b818e975a 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel_section.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerability_dashboard/vulnerability_table_panel_section.tsx @@ -24,33 +24,38 @@ import { } from '../../../common/types_old'; import { DASHBOARD_TABLE_TYPES } from './vulnerability_table_panel.config'; import { VulnerabilityTablePanel } from './vulnerability_table_panel'; -import { - NavFilter, - useNavigateVulnerabilities, - useNavigateVulnerabilitiesByResource, -} from '../../common/hooks/use_navigate_findings'; +import { NavFilter, useNavigateVulnerabilities } from '../../common/hooks/use_navigate_findings'; import { CVSScoreBadge, SeverityStatusBadge } from '../../components/vulnerability_badges'; import { useVulnerabilityDashboardApi } from '../../common/api/use_vulnerability_dashboard_api'; +import { VULNERABILITY_GROUPING_OPTIONS, VULNERABILITY_FIELDS } from '../../common/constants'; export const VulnerabilityTablePanelSection = () => { const getVulnerabilityDashboard = useVulnerabilityDashboardApi(); const { euiTheme } = useEuiTheme(); const navToVulnerabilities = useNavigateVulnerabilities(); - const navToVulnerabilitiesByResource = useNavigateVulnerabilitiesByResource(); const onCellClick = useCallback( (filters: NavFilter) => { - navToVulnerabilities(filters); + navToVulnerabilities(filters, [VULNERABILITY_GROUPING_OPTIONS.NONE]); }, [navToVulnerabilities] ); const onViewVulnerabilitiesByResourceClick = useCallback(() => { - navToVulnerabilitiesByResource(); - }, [navToVulnerabilitiesByResource]); + navToVulnerabilities({}, [VULNERABILITY_GROUPING_OPTIONS.RESOURCE_ID]); + }, [navToVulnerabilities]); + + const onViewPatchableVulnerabilitiesClick = useCallback(() => { + navToVulnerabilities( + { + [VULNERABILITY_FIELDS.PACKAGE_FIXED_VERSION]: '*', + }, + [VULNERABILITY_GROUPING_OPTIONS.NONE] + ); + }, [navToVulnerabilities]); const onViewVulnerabilitiesClick = useCallback(() => { - navToVulnerabilities(); + navToVulnerabilities({}, [VULNERABILITY_GROUPING_OPTIONS.NONE]); }, [navToVulnerabilities]); const topVulnerableResourceColumns: Array> = useMemo( @@ -358,7 +363,7 @@ export const VulnerabilityTablePanelSection = () => { items={getVulnerabilityDashboard.data?.topPatchableVulnerabilities} columns={topPatchableVulnerabilitiesColumns} tableType={DASHBOARD_TABLE_TYPES.TOP_PATCH_VULNERABILITIES} - onViewVulnerabilitiesClick={onViewVulnerabilitiesClick} + onViewVulnerabilitiesClick={onViewPatchableVulnerabilitiesClick} /> )} diff --git a/x-pack/plugins/cloud_security_posture/server/tasks/findings_stats_task.ts b/x-pack/plugins/cloud_security_posture/server/tasks/findings_stats_task.ts index df9c1c73224c2..ed1be5f4f0bd5 100644 --- a/x-pack/plugins/cloud_security_posture/server/tasks/findings_stats_task.ts +++ b/x-pack/plugins/cloud_security_posture/server/tasks/findings_stats_task.ts @@ -11,7 +11,7 @@ import { TaskManagerSetupContract, TaskManagerStartContract, } from '@kbn/task-manager-plugin/server'; -import { SearchRequest } from '@kbn/data-plugin/common'; +import type { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; import { ElasticsearchClient } from '@kbn/core/server'; import { QueryDslQueryContainer } from '@kbn/data-views-plugin/common/types'; import type { ISavedObjectsRepository, Logger } from '@kbn/core/server'; diff --git a/x-pack/plugins/index_management/__jest__/client_integration/helpers/setup_environment.tsx b/x-pack/plugins/index_management/__jest__/client_integration/helpers/setup_environment.tsx index 99fa4075d2d94..5c448aef1790c 100644 --- a/x-pack/plugins/index_management/__jest__/client_integration/helpers/setup_environment.tsx +++ b/x-pack/plugins/index_management/__jest__/client_integration/helpers/setup_environment.tsx @@ -86,6 +86,7 @@ const appDependencies = { enableDataStreamsStorageColumn: true, enableMappingsSourceFieldSection: true, enableTogglingDataRetention: true, + enableSemanticText: false, }, } as any; diff --git a/x-pack/plugins/index_management/public/application/app_context.tsx b/x-pack/plugins/index_management/public/application/app_context.tsx index 8ee80e2f8f55f..964a0e098c15e 100644 --- a/x-pack/plugins/index_management/public/application/app_context.tsx +++ b/x-pack/plugins/index_management/public/application/app_context.tsx @@ -64,6 +64,7 @@ export interface AppDependencies { enableDataStreamsStorageColumn: boolean; enableMappingsSourceFieldSection: boolean; enableTogglingDataRetention: boolean; + enableSemanticText: boolean; }; history: ScopedHistory; setBreadcrumbs: (type: IndexManagementBreadcrumb, additionalBreadcrumb?: EuiBreadcrumb) => void; diff --git a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx index 71181796f6cbf..b126f5b960a47 100644 --- a/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx +++ b/x-pack/plugins/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx @@ -62,22 +62,15 @@ export const DetailsPageMappingsContent: FunctionComponent<{ showAboutMappings: boolean; jsonData: any; refetchMapping: () => void; - isSemanticTextEnabled?: boolean; -}> = ({ - index, - data, - jsonData, - refetchMapping, - showAboutMappings, - isSemanticTextEnabled = false, -}) => { +}> = ({ index, data, jsonData, refetchMapping, showAboutMappings }) => { const { services: { extensionsService }, core: { getUrlForApp }, plugins: { ml }, url, + config, } = useAppContext(); - + const { enableSemanticText: isSemanticTextEnabled } = config; const [errorsInTrainedModelDeployment, setErrorsInTrainedModelDeployment] = useState( [] ); diff --git a/x-pack/plugins/index_management/public/plugin.ts b/x-pack/plugins/index_management/public/plugin.ts index 4e6947b56ba9e..a94fca4f6198f 100644 --- a/x-pack/plugins/index_management/public/plugin.ts +++ b/x-pack/plugins/index_management/public/plugin.ts @@ -46,6 +46,7 @@ export class IndexMgmtUIPlugin isIndexManagementUiEnabled: boolean; enableMappingsSourceFieldSection: boolean; enableTogglingDataRetention: boolean; + enableSemanticText: boolean; }; constructor(ctx: PluginInitializerContext) { @@ -62,6 +63,7 @@ export class IndexMgmtUIPlugin enableDataStreamsStorageColumn, enableMappingsSourceFieldSection, enableTogglingDataRetention, + dev: { enableSemanticText }, } = ctx.config.get(); this.config = { isIndexManagementUiEnabled, @@ -72,6 +74,7 @@ export class IndexMgmtUIPlugin enableDataStreamsStorageColumn: enableDataStreamsStorageColumn ?? true, enableMappingsSourceFieldSection: enableMappingsSourceFieldSection ?? true, enableTogglingDataRetention: enableTogglingDataRetention ?? true, + enableSemanticText: enableSemanticText ?? false, }; } diff --git a/x-pack/plugins/index_management/public/types.ts b/x-pack/plugins/index_management/public/types.ts index e6a3b9a611026..30df6157abd8b 100644 --- a/x-pack/plugins/index_management/public/types.ts +++ b/x-pack/plugins/index_management/public/types.ts @@ -54,4 +54,7 @@ export interface ClientConfigType { enableDataStreamsStorageColumn?: boolean; enableMappingsSourceFieldSection?: boolean; enableTogglingDataRetention?: boolean; + dev: { + enableSemanticText?: boolean; + }; } diff --git a/x-pack/plugins/index_management/server/config.ts b/x-pack/plugins/index_management/server/config.ts index 4348d7ac2a774..c213cf5b8a87f 100644 --- a/x-pack/plugins/index_management/server/config.ts +++ b/x-pack/plugins/index_management/server/config.ts @@ -35,6 +35,8 @@ const schemaLatest = schema.object( dev: schema.object({ // deprecated as unused after index details page has been implemented enableIndexDetailsPage: schema.boolean({ defaultValue: false }), + // deprecate as unused after semantic text is enabled everywhere + enableSemanticText: schema.boolean({ defaultValue: false }), }), enableIndexStats: offeringBasedSchema({ // Index stats information is disabled in serverless; refer to the serverless.yml file as the source of truth @@ -69,6 +71,9 @@ const schemaLatest = schema.object( const configLatest: PluginConfigDescriptor = { exposeToBrowser: { ui: true, + dev: { + enableSemanticText: true, + }, enableIndexActions: true, enableLegacyTemplates: true, enableIndexStats: true, diff --git a/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.test.ts b/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.test.ts index d15723e074667..8904031615bcf 100644 --- a/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.test.ts +++ b/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.test.ts @@ -835,6 +835,47 @@ describe('Textbased Data Source', () => { isBucketed: false, hasTimeShift: false, hasReducedTimeRange: false, + scale: 'ratio', + }); + }); + + it('should get an operation for col2', () => { + const state = { + layers: { + a: { + columns: [ + { + columnId: 'col1', + fieldName: 'Test 1', + meta: { + type: 'number', + }, + }, + { + columnId: 'col2', + fieldName: 'Test 2', + meta: { + type: 'date', + }, + }, + ], + index: 'foo', + }, + }, + } as unknown as TextBasedPrivateState; + + publicAPI = TextBasedDatasource.getPublicAPI({ + state, + layerId: 'a', + indexPatterns, + }); + expect(publicAPI.getOperationForColumnId('col2')).toEqual({ + label: 'Test 2', + dataType: 'date', + isBucketed: true, + hasTimeShift: false, + hasReducedTimeRange: false, + scale: 'interval', }); }); diff --git a/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.tsx b/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.tsx index 9f5b44e660bd3..85d622380695c 100644 --- a/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.tsx +++ b/x-pack/plugins/lens/public/datasources/text_based/text_based_languages.tsx @@ -30,6 +30,7 @@ import { DatasourceDimensionTriggerProps, DataSourceInfo, UserMessage, + OperationMetadata, } from '../../types'; import { generateId } from '../../id_generator'; import type { @@ -533,6 +534,18 @@ export function getTextBasedDatasource({ const layer = state.layers[layerId]; const column = layer?.columns?.find((c) => c.columnId === columnId); const columnLabelMap = TextBasedDatasource.uniqueLabels(state, indexPatterns); + let scale: OperationMetadata['scale'] = 'ordinal'; + switch (column?.meta?.type) { + case 'date': + scale = 'interval'; + break; + case 'number': + scale = 'ratio'; + break; + default: + scale = 'ordinal'; + break; + } if (column) { return { @@ -542,6 +555,7 @@ export function getTextBasedDatasource({ inMetricDimension: column.inMetricDimension, hasTimeShift: false, hasReducedTimeRange: false, + scale, }; } return null; diff --git a/x-pack/plugins/lens/public/embeddable/embeddable.tsx b/x-pack/plugins/lens/public/embeddable/embeddable.tsx index daf1d078894e9..366b631f7f54b 100644 --- a/x-pack/plugins/lens/public/embeddable/embeddable.tsx +++ b/x-pack/plugins/lens/public/embeddable/embeddable.tsx @@ -1148,7 +1148,7 @@ export class Embeddable handleEvent={this.handleEvent} onData$={this.updateActiveData} onRender$={this.onRender} - interactive={!input.disableTriggers && !this.isTextBasedLanguage()} + interactive={!input.disableTriggers} renderMode={input.renderMode} syncColors={input.syncColors} syncTooltips={input.syncTooltips} @@ -1369,6 +1369,7 @@ export class Embeddable } else if (isLensTableRowContextMenuClickEvent(event)) { eventHandler = this.input.onTableRowClick; } + const esqlQuery = this.isTextBasedLanguage() ? this.savedVis?.state.query : undefined; eventHandler?.({ ...event.data, @@ -1384,6 +1385,7 @@ export class Embeddable ...event.data, timeFieldName: event.data.timeFieldName || inferTimeField(this.deps.data.datatableUtilities, event), + query: esqlQuery, }, embeddable: this, }); diff --git a/x-pack/plugins/ml/public/application/components/callout/callout.tsx b/x-pack/plugins/ml/public/application/components/callout/callout.tsx index b2c588377d232..8c60f87ef2427 100644 --- a/x-pack/plugins/ml/public/application/components/callout/callout.tsx +++ b/x-pack/plugins/ml/public/application/components/callout/callout.tsx @@ -55,7 +55,7 @@ const Message: FC> = ({ text, url }) => ( export const Callout: FC = ({ heading, status, text, url }) => ( <> = ({ job, refreshJobList }) => { type: 'icon', icon: 'crosshairs', onClick: checkJobIsClosed, + 'data-test-subj': `mlADModelSnapShotRevertButton`, }, { name: i18n.translate('xpack.ml.modelSnapshotTable.actions.edit.name', { @@ -199,6 +200,7 @@ export const ModelSnapshotTable: FC = ({ job, refreshJobList }) => { type: 'icon', icon: 'pencil', onClick: setEditSnapshot, + 'data-test-subj': `mlADModelSnapShotsEditButton`, }, ], }, diff --git a/x-pack/plugins/ml/public/application/components/stats_bar/stat.tsx b/x-pack/plugins/ml/public/application/components/stats_bar/stat.tsx index 3f27559bd7cbb..90c2894365deb 100644 --- a/x-pack/plugins/ml/public/application/components/stats_bar/stat.tsx +++ b/x-pack/plugins/ml/public/application/components/stats_bar/stat.tsx @@ -24,7 +24,11 @@ export const Stat: FC = ({ stat }) => { return ( {stat.label}:{' '} - {stat.value} + + + {stat.value} + + ); }; diff --git a/x-pack/plugins/ml/public/application/explorer/anomaly_context_menu.tsx b/x-pack/plugins/ml/public/application/explorer/anomaly_context_menu.tsx index afab1ef4fcb6a..b27f8efe4fcc6 100644 --- a/x-pack/plugins/ml/public/application/explorer/anomaly_context_menu.tsx +++ b/x-pack/plugins/ml/public/application/explorer/anomaly_context_menu.tsx @@ -41,17 +41,17 @@ import { import type { TimeRangeBounds } from '@kbn/ml-time-buckets'; import { useTableSeverity } from '../components/controls/select_severity'; import type { JobId } from '../../../common/types/anomaly_detection_jobs'; -import { getDefaultExplorerChartsPanelTitle } from '../../embeddables/anomaly_charts/anomaly_charts_embeddable'; import { MAX_ANOMALY_CHARTS_ALLOWED } from '../../embeddables/anomaly_charts/anomaly_charts_initializer'; import { useAnomalyExplorerContext } from './anomaly_explorer_context'; import { escapeKueryForEmbeddableFieldValuePair } from '../util/string_utils'; import { useCasesModal } from '../contexts/kibana/use_cases_modal'; import { DEFAULT_MAX_SERIES_TO_PLOT } from '../services/anomaly_explorer_charts_service'; -import type { AnomalyChartsEmbeddableInput } from '../../embeddables'; +import type { AnomalyChartsEmbeddableState } from '../../embeddables'; import { ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE } from '../../embeddables'; import { useMlKibana } from '../contexts/kibana'; import type { AppStateSelectedCells, ExplorerJob } from './explorer_utils'; import { getSelectionInfluencers, getSelectionTimeRange } from './explorer_utils'; +import { getDefaultExplorerChartsPanelTitle } from '../../embeddables/anomaly_charts/utils'; interface AnomalyContextMenuProps { selectedJobs: ExplorerJob[]; @@ -133,7 +133,9 @@ export const AnomalyContextMenu: FC = ({ }, [chartsData.seriesToPlot, globalTimeRange, selectedCells, bounds, interval]); const isMaxSeriesToPlotValid = - maxSeriesToPlot >= 1 && maxSeriesToPlot <= MAX_ANOMALY_CHARTS_ALLOWED; + typeof maxSeriesToPlot === 'number' && + maxSeriesToPlot >= 1 && + maxSeriesToPlot <= MAX_ANOMALY_CHARTS_ALLOWED; const jobIds = selectedJobs.map(({ id }) => id); @@ -180,7 +182,7 @@ export const AnomalyContextMenu: FC = ({ ({ dashboardId, newTitle, newDescription }) => { const stateTransfer = embeddable!.getStateTransfer(); - const embeddableInput: Partial = { + const embeddableInput: Partial = { ...getEmbeddableInput(), title: newTitle, description: newDescription, diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/constants.ts b/x-pack/plugins/ml/public/application/explorer/explorer_charts/constants.ts index 37ef9bbc72898..110c053d11a30 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/constants.ts +++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/constants.ts @@ -6,3 +6,4 @@ */ export const TRANSPARENT_BACKGROUND = 'rgba(0, 0, 0, 0)'; +export const CHART_HEIGHT = 170; diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_anomalies_container.tsx b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_anomalies_container.tsx index 6eaf0fffbf82b..d1a43559cbc98 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_anomalies_container.tsx +++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_anomalies_container.tsx @@ -62,7 +62,9 @@ export const ExplorerAnomaliesContainer: FC = ( timeRange, }) => { return ( - <> + // TODO: Remove data-shared-item and data-rendering-count as part of https://github.com/elastic/kibana/issues/179376 + // These attributes are temporarily needed for reporting to not have any warning +
@@ -96,9 +98,10 @@ export const ExplorerAnomaliesContainer: FC = ( tooManyBucketsCalloutMsg, showSelectedInterval, chartsService, + id, }} /> )} - +
); }; diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_distribution.js b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_distribution.js index f1794e812cc7e..58052f5f35a65 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_distribution.js +++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_distribution.js @@ -32,13 +32,17 @@ import { numTicksForDateFormat, removeLabelOverlap, chartExtendedLimits, + LINE_CHART_ANOMALY_RADIUS, } from '../../util/chart_utils'; import { LoadingIndicator } from '../../components/loading_indicator/loading_indicator'; import { CHART_TYPE } from '../explorer_constants'; -import { TRANSPARENT_BACKGROUND } from './constants'; +import { CHART_HEIGHT, TRANSPARENT_BACKGROUND } from './constants'; +import { filter } from 'rxjs'; +import { drawCursor } from './utils/draw_anomaly_explorer_charts_cursor'; const CONTENT_WRAPPER_HEIGHT = 215; +const SCHEDULED_EVENT_MARKER_HEIGHT = 5; // If a rare/event-distribution chart has a cardinality of 10 or less, // then the chart will display the y axis labels for each lane of events. @@ -54,10 +58,32 @@ export class ExplorerChartDistribution extends React.Component { seriesConfig: PropTypes.object, severity: PropTypes.number, tooltipService: PropTypes.object.isRequired, + cursor$: PropTypes.object, }; + constructor(props) { + super(props); + this.chartScales = undefined; + this.cursorStateSubscription = undefined; + } componentDidMount() { this.renderChart(); + this.cursorStateSubscription = this.props.cursor$ + .pipe(filter((c) => c.isDateHistogram)) + .subscribe((cursor) => { + drawCursor( + cursor.cursor, + this.rootNode, + this.props.id, + this.props.seriesConfig, + this.chartScales, + this.props.chartTheme + ); + }); + } + + componentWillUnmount() { + this.cursorStateSubscription?.unsubscribe(); } componentDidUpdate() { @@ -71,8 +97,7 @@ export class ExplorerChartDistribution extends React.Component { timeBuckets, showSelectedInterval, onPointerUpdate, - chartTheme, - cursor, + id: chartId, } = this.props; const element = this.rootNode; @@ -90,10 +115,6 @@ export class ExplorerChartDistribution extends React.Component { ); let vizWidth = 0; - const chartHeight = 170; - const LINE_CHART_ANOMALY_RADIUS = 7; - const SCHEDULED_EVENT_MARKER_HEIGHT = 5; - const chartType = getChartType(config); // Left margin is adjusted later for longest y-axis label. @@ -122,11 +143,12 @@ export class ExplorerChartDistribution extends React.Component { chartElement.select('svg').remove(); const svgWidth = element.clientWidth; - const svgHeight = chartHeight + margin.top + margin.bottom; + const svgHeight = CHART_HEIGHT + margin.top + margin.bottom; const svg = chartElement .append('svg') .classed('ml-explorer-chart-svg', true) + .attr('id', 'ml-explorer-chart-svg' + chartId) .attr('width', svgWidth) .attr('height', svgHeight); @@ -168,7 +190,7 @@ export class ExplorerChartDistribution extends React.Component { lineChartYScale = d3.scale .linear() - .range([chartHeight, 0]) + .range([CHART_HEIGHT, 0]) .domain([yScaleDomainMin < 0 ? yScaleDomainMin : 0, yScaleDomainMax]) .nice(); } else if (chartType === CHART_TYPE.EVENT_DISTRIBUTION) { @@ -176,7 +198,7 @@ export class ExplorerChartDistribution extends React.Component { const rowMargin = 5; lineChartYScale = d3.scale .ordinal() - .rangePoints([rowMargin, chartHeight - rowMargin]) + .rangePoints([rowMargin, CHART_HEIGHT - rowMargin]) .domain(scaleCategories); } else { throw new Error(`chartType '${chartType}' not supported`); @@ -260,7 +282,7 @@ export class ExplorerChartDistribution extends React.Component { .append('rect') .attr('x', 0) .attr('y', 0) - .attr('height', chartHeight) + .attr('height', CHART_HEIGHT) .attr('width', vizWidth) .style('stroke', '#cccccc') .style('fill', 'none') @@ -268,17 +290,17 @@ export class ExplorerChartDistribution extends React.Component { drawRareChartAxes(); drawRareChartHighlightedSpan(); - drawSyncedCursorLine(lineChartGroup); + drawCursorListener(lineChartGroup); drawRareChartDots(data, lineChartGroup, lineChartValuesLine); drawRareChartMarkers(data); } - function drawSyncedCursorLine(lineChartGroup) { + function drawCursorListener(lineChartGroup) { lineChartGroup .append('rect') .attr('x', 0) .attr('y', 0) - .attr('height', chartHeight) + .attr('height', CHART_HEIGHT) .attr('width', vizWidth) .on('mouseout', function () { onPointerUpdate({ @@ -293,46 +315,19 @@ export class ExplorerChartDistribution extends React.Component { .on('mousemove', function () { const mouse = d3.mouse(this); - onPointerUpdate({ - chartId: 'ml-anomaly-chart-metric', - scale: 'time', - smHorizontalValue: null, - smVerticalValue: null, - type: 'Over', - unit: undefined, - x: moment(lineChartXScale.invert(mouse[0])).unix() * 1000, - }); + if (onPointerUpdate) { + onPointerUpdate({ + chartId: 'ml-anomaly-chart-metric', + scale: 'time', + smHorizontalValue: null, + smVerticalValue: null, + type: 'Over', + unit: undefined, + x: moment(lineChartXScale.invert(mouse[0])).unix() * 1000, + }); + } }) .style('fill', TRANSPARENT_BACKGROUND); - - const cursorData = - cursor && - cursor.type === 'Over' && - cursor.x >= config.plotEarliest && - cursor.x <= config.plotLatest - ? [cursor.x] - : []; - - const cursorMouseLine = lineChartGroup - .append('g') - .attr('class', 'ml-anomaly-chart-cursor') - .selectAll('.ml-anomaly-chart-cursor-line') - .data(cursorData); - - cursorMouseLine - .enter() - .append('path') - .attr('class', 'ml-anomaly-chart-cursor-line') - .attr('d', (ts) => { - const xPosition = lineChartXScale(ts); - return `M${xPosition},${chartHeight} ${xPosition},0`; - }) - // Use elastic chart's cursor line style if possible - .style('stroke', chartTheme.crosshair.line.stroke) - .style('stroke-width', `${chartTheme.crosshair.line.strokeWidth}px`) - .style('stroke-dasharray', chartTheme.crosshair.line.dash?.join(',') ?? '4,4'); - - cursorMouseLine.exit().remove(); } function drawRareChartAxes() { @@ -350,7 +345,7 @@ export class ExplorerChartDistribution extends React.Component { .axis() .scale(lineChartXScale) .orient('bottom') - .innerTickSize(-chartHeight) + .innerTickSize(-CHART_HEIGHT) .outerTickSize(0) .tickPadding(10) .tickFormat((d) => moment(d).format(xAxisTickFormat)); @@ -389,7 +384,7 @@ export class ExplorerChartDistribution extends React.Component { const gAxis = axes .append('g') .attr('class', 'x axis') - .attr('transform', 'translate(0,' + chartHeight + ')') + .attr('transform', 'translate(0,' + CHART_HEIGHT + ')') .call(xAxis); axes.append('g').attr('class', 'y axis').call(yAxis); @@ -450,7 +445,7 @@ export class ExplorerChartDistribution extends React.Component { .attr('rx', 3) .attr('ry', 3) .attr('width', rectWidth - 4) - .attr('height', chartHeight - 4); + .attr('height', CHART_HEIGHT - 4); } function drawRareChartMarkers(data) { @@ -635,6 +630,7 @@ export class ExplorerChartDistribution extends React.Component { y: LINE_CHART_ANOMALY_RADIUS * 2, }); } + this.chartScales = { lineChartXScale, margin }; } shouldComponentUpdate() { diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_distribution.test.js b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_distribution.test.js index ee0c2c41074e0..246e46c50e5f0 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_distribution.test.js +++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_distribution.test.js @@ -7,6 +7,7 @@ import { chartData as mockChartData } from './__mocks__/mock_chart_data_rare'; import seriesConfig from './__mocks__/mock_series_config_rare.json'; +import { BehaviorSubject } from 'rxjs'; import { mountWithIntl } from '@kbn/test-jest-helpers'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; @@ -20,9 +21,7 @@ const utilityProps = { timeBuckets: timeBucketsMock, chartTheme: kibanaContextMock.services.charts.theme.useChartsBaseTheme(), onPointerUpdate: jest.fn(), - cursor: { - x: 10432423, - }, + cursor$: new BehaviorSubject({ isDataHistorgram: true, cursor: { x: 10432423 } }), }; describe('ExplorerChart', () => { diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_single_metric.js b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_single_metric.js index 3291307710cb2..77118b376e97a 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_single_metric.js +++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_single_metric.js @@ -39,14 +39,15 @@ import { getMultiBucketImpactTooltipValue, } from '../../util/chart_utils'; import { LoadingIndicator } from '../../components/loading_indicator/loading_indicator'; -import { TRANSPARENT_BACKGROUND } from './constants'; +import { CHART_HEIGHT, TRANSPARENT_BACKGROUND } from './constants'; +import { filter } from 'rxjs'; +import { drawCursor } from './utils/draw_anomaly_explorer_charts_cursor'; const CONTENT_WRAPPER_HEIGHT = 215; const CONTENT_WRAPPER_CLASS = 'ml-explorer-chart-content-wrapper'; export class ExplorerChartSingleMetric extends React.Component { static contextType = context; - static propTypes = { tooManyBuckets: PropTypes.bool, seriesConfig: PropTypes.object, @@ -55,11 +56,33 @@ export class ExplorerChartSingleMetric extends React.Component { timeBuckets: PropTypes.object.isRequired, onPointerUpdate: PropTypes.func.isRequired, chartTheme: PropTypes.object.isRequired, - cursor: PropTypes.object, + cursor$: PropTypes.object, + id: PropTypes.string.isRequired, }; + constructor(props) { + super(props); + this.chartScales = undefined; + } componentDidMount() { this.renderChart(); + + this.cursorStateSubscription = this.props.cursor$ + .pipe(filter((c) => c.isDateHistogram)) + .subscribe((cursor) => { + drawCursor( + cursor.cursor, + this.rootNode, + this.props.id, + this.props.seriesConfig, + this.chartScales, + this.props.chartTheme + ); + }); + } + + componentWillUnmount() { + this.cursorStateSubscription?.unsubscribe(); } componentDidUpdate() { @@ -73,8 +96,7 @@ export class ExplorerChartSingleMetric extends React.Component { timeBuckets, showSelectedInterval, onPointerUpdate, - chartTheme, - cursor, + id: chartId, } = this.props; const element = this.rootNode; @@ -92,7 +114,6 @@ export class ExplorerChartSingleMetric extends React.Component { ); let vizWidth = 0; - const chartHeight = 170; // Left margin is adjusted later for longest y-axis label. const margin = { top: 10, right: 0, bottom: 30, left: 60 }; @@ -112,18 +133,19 @@ export class ExplorerChartSingleMetric extends React.Component { chartElement.select('svg').remove(); const svgWidth = element.clientWidth; - const svgHeight = chartHeight + margin.top + margin.bottom; + const svgHeight = CHART_HEIGHT + margin.top + margin.bottom; const svg = chartElement .append('svg') .classed('ml-explorer-chart-svg', true) + .attr('id', 'ml-explorer-chart-svg' + chartId) .attr('width', svgWidth) .attr('height', svgHeight); // Set the size of the left margin according to the width of the largest y axis tick label. lineChartYScale = d3.scale .linear() - .range([chartHeight, 0]) + .range([CHART_HEIGHT, 0]) .domain([chartLimits.min, chartLimits.max]) .nice(); @@ -188,7 +210,7 @@ export class ExplorerChartSingleMetric extends React.Component { .append('rect') .attr('x', 0) .attr('y', 0) - .attr('height', chartHeight) + .attr('height', CHART_HEIGHT) .attr('width', vizWidth) .style('stroke', '#cccccc') .style('fill', 'none') @@ -196,18 +218,18 @@ export class ExplorerChartSingleMetric extends React.Component { drawLineChartAxes(); drawLineChartHighlightedSpan(); - drawSyncedCursorLine(lineChartGroup); + drawCursorListener(lineChartGroup); drawLineChartPaths(data); drawLineChartDots(data, lineChartGroup, lineChartValuesLine); drawLineChartMarkers(data); } - function drawSyncedCursorLine(lineChartGroup) { + function drawCursorListener(lineChartGroup) { lineChartGroup .append('rect') .attr('x', 0) .attr('y', 0) - .attr('height', chartHeight) + .attr('height', CHART_HEIGHT) .attr('width', vizWidth) .on('mouseout', function () { onPointerUpdate({ @@ -235,35 +257,6 @@ export class ExplorerChartSingleMetric extends React.Component { } }) .style('fill', TRANSPARENT_BACKGROUND); - - const cursorData = - cursor && - cursor.type === 'Over' && - cursor.x >= config.plotEarliest && - cursor.x <= config.plotLatest - ? [cursor.x] - : []; - - const cursorMouseLine = lineChartGroup - .append('g') - .attr('class', 'ml-anomaly-chart-cursor') - .selectAll('.ml-anomaly-chart-cursor-line') - .data(cursorData); - - cursorMouseLine - .enter() - .append('path') - .attr('class', 'ml-anomaly-chart-cursor-line') - .attr('d', (ts) => { - const xPosition = lineChartXScale(ts); - return `M${xPosition},${chartHeight} ${xPosition},0`; - }) - // Use elastic chart's cursor line style if possible - .style('stroke', chartTheme.crosshair.line.stroke) - .style('stroke-width', `${chartTheme.crosshair.line.strokeWidth}px`) - .style('stroke-dasharray', chartTheme.crosshair.line.dash?.join(',') ?? '4,4'); - - cursorMouseLine.exit().remove(); } function drawLineChartAxes() { @@ -281,7 +274,7 @@ export class ExplorerChartSingleMetric extends React.Component { .axis() .scale(lineChartXScale) .orient('bottom') - .innerTickSize(-chartHeight) + .innerTickSize(-CHART_HEIGHT) .outerTickSize(0) .tickPadding(10) .tickFormat((d) => moment(d).format(xAxisTickFormat)); @@ -320,7 +313,7 @@ export class ExplorerChartSingleMetric extends React.Component { const gAxis = axes .append('g') .attr('class', 'x axis') - .attr('transform', 'translate(0,' + chartHeight + ')') + .attr('transform', 'translate(0,' + CHART_HEIGHT + ')') .call(xAxis); axes.append('g').attr('class', 'y axis').call(yAxis); @@ -348,7 +341,7 @@ export class ExplorerChartSingleMetric extends React.Component { .attr('rx', 3) .attr('ry', 3) .attr('width', rectWidth - 4) - .attr('height', chartHeight - 4); + .attr('height', CHART_HEIGHT - 4); } function drawLineChartPaths(data) { @@ -583,6 +576,8 @@ export class ExplorerChartSingleMetric extends React.Component { y: LINE_CHART_ANOMALY_RADIUS * 2, }); } + + this.chartScales = { lineChartXScale, margin }; } shouldComponentUpdate() { diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_single_metric.test.js b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_single_metric.test.js index 063762972e268..70eb254f99072 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_single_metric.test.js +++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_chart_single_metric.test.js @@ -15,14 +15,13 @@ import React from 'react'; import { ExplorerChartSingleMetric } from './explorer_chart_single_metric'; import { timeBucketsMock } from '../../util/__mocks__/time_buckets'; import { kibanaContextMock } from '../../contexts/kibana/__mocks__/kibana_context'; +import { BehaviorSubject } from 'rxjs'; const utilityProps = { timeBuckets: timeBucketsMock, chartTheme: kibanaContextMock.services.charts.theme.useChartsBaseTheme(), onPointerUpdate: jest.fn(), - cursor: { - x: 10432423, - }, + cursor$: new BehaviorSubject({ isDataHistorgram: true, cursor: { x: 10432423 } }), }; describe('ExplorerChart', () => { diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container.js b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container.js index 9e84a1f546b04..702aeed891ebc 100644 --- a/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container.js +++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/explorer_charts_container.js @@ -44,7 +44,6 @@ import { addItemToRecentlyAccessed } from '../../util/recently_accessed'; import { EmbeddedMapComponentWrapper } from './explorer_chart_embedded_map'; import { useActiveCursor } from '@kbn/charts-plugin/public'; import { BarSeries, Chart, Settings, LEGACY_LIGHT_THEME } from '@elastic/charts'; -import useObservable from 'react-use/lib/useObservable'; import { escapeKueryForFieldValuePair } from '../../util/string_utils'; const textTooManyBuckets = i18n.translate('xpack.ml.explorer.charts.tooManyBucketsDescription', { @@ -78,15 +77,15 @@ export function getEntitiesQuery(series) { // create a somewhat unique ID // from charts metadata for React's key attribute -function getChartId(series) { - const { jobId, detectorLabel, entityFields } = series; - const entities = entityFields.map((ef) => `${ef.fieldName}/${ef.fieldValue}`).join(','); - const id = `${jobId}_${detectorLabel}_${entities}`; +function getChartId(series, randomId) { + const { jobId, detectorLabel } = series; + const id = `${jobId}${detectorLabel}`.replace(/[^a-zA-Z]+/g, '') + randomId; return id; } // Wrapper for a single explorer chart function ExplorerChartContainer({ + id, series, severity, tooManyBuckets, @@ -194,8 +193,6 @@ function ExplorerChartContainer({ isDateHistogram: true, }); - const cursor = useObservable(chartsService.activeCursor.activeCursor$)?.cursor; - const addToRecentlyAccessed = useCallback(() => { if (recentlyAccessed) { addItemToRecentlyAccessed( @@ -333,6 +330,7 @@ function ExplorerChartContainer({ {(tooltipService) => ( )} @@ -352,6 +350,7 @@ function ExplorerChartContainer({ {(tooltipService) => ( )} @@ -373,6 +372,7 @@ function ExplorerChartContainer({ // Flex layout wrapper for all explorer charts export const ExplorerChartsContainerUI = ({ + id: uuid, chartsPerRow, seriesToPlot, severity, @@ -422,6 +422,7 @@ export const ExplorerChartsContainerUI = ({ const chartsColumns = chartsPerRow === 1 ? 0 : chartsPerRow; const wrapLabel = seriesToUse.some((series) => isLabelLengthAboveThreshold(series)); + return ( <> @@ -431,29 +432,34 @@ export const ExplorerChartsContainerUI = ({ data-test-subj="mlExplorerChartsContainer" > {seriesToUse.length > 0 && - seriesToUse.map((series) => ( - - - - ))} + seriesToUse.map((series, idx) => { + const chartId = getChartId(series, '-' + (uuid ?? '') + idx); + return ( + + + + ); + })} ); diff --git a/x-pack/plugins/ml/public/application/explorer/explorer_charts/utils/draw_anomaly_explorer_charts_cursor.ts b/x-pack/plugins/ml/public/application/explorer/explorer_charts/utils/draw_anomaly_explorer_charts_cursor.ts new file mode 100644 index 0000000000000..dae80948e16e7 --- /dev/null +++ b/x-pack/plugins/ml/public/application/explorer/explorer_charts/utils/draw_anomaly_explorer_charts_cursor.ts @@ -0,0 +1,67 @@ +/* + * 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 d3 from 'd3'; +import type { PartialTheme } from '@elastic/charts'; +import type { PointerEvent } from '@elastic/charts'; +import { CHART_HEIGHT } from '../constants'; +interface ChartScales { + lineChartXScale: (value: number | null | string) => number; + margin: { left: number; right: number; top: number; bottom: number }; +} +export function drawCursor( + cursor: Required, + rootNode: HTMLDivElement, + chartId: string, + config: { plotEarliest: number; plotLatest: number }, + chartScales: ChartScales, + chartTheme: PartialTheme +) { + if (!chartScales) return; + const { lineChartXScale, margin: updatedMargin } = chartScales; + + const element = rootNode; + const chartElement = d3.select(element).select('#ml-explorer-chart-svg' + chartId); + if (!chartElement || !lineChartXScale) return; + chartElement.select('.ml-anomaly-chart-cursor-line').remove(); + + const crosshairLine = chartTheme?.crosshair?.line ?? { + visible: true, + stroke: '#69707D', + strokeWidth: 1, + dash: [4, 4], + }; + const cursorData = + cursor && + cursor.type === 'Over' && + cursor.x !== null && + cursor.x >= config.plotEarliest && + cursor.x <= config.plotLatest + ? [cursor.x] + : []; + + const cursorMouseLine = chartElement + .append('g') + .attr('class', 'ml-anomaly-chart-cursor') + .selectAll('.ml-anomaly-chart-cursor-line') + .data(cursorData); + + // @ts-expect-error d3 types are not up to date + cursorMouseLine + .enter() + .append('path') + .attr('class', 'ml-anomaly-chart-cursor-line') + .attr('d', (ts) => { + const xPosition = lineChartXScale(ts); + return `M${xPosition},${CHART_HEIGHT} ${xPosition},0`; + }) + // Use elastic chart's cursor line style if possible + .style('stroke', crosshairLine.stroke) + .style('stroke-width', `${crosshairLine.strokeWidth}px`) + .style('stroke-dasharray', crosshairLine.dash?.join(',') ?? '4,4') + .attr('transform', 'translate(' + updatedMargin.left + ',' + updatedMargin.top + ')'); + cursorMouseLine.exit().remove(); +} diff --git a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/forecasts_table/forecasts_table.js b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/forecasts_table/forecasts_table.js index 38df3e1830f41..db36d97e0a9bd 100644 --- a/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/forecasts_table/forecasts_table.js +++ b/x-pack/plugins/ml/public/application/jobs/jobs_list/components/job_details/forecasts_table/forecasts_table.js @@ -325,6 +325,7 @@ export class ForecastsTable extends Component { } iconType="visLine" aria-label={viewForecastAriaLabel} + data-test-subj="mlJobListForecastTabOpenSingleMetricViewButton" /> ); }, @@ -333,6 +334,7 @@ export class ForecastsTable extends Component { return ( = ({ setTimeRange, timeRange }) => { fullWidth={true} startDateControl={ = ({ setTimeRange, timeRange }) => { } endDateControl={ { {showCallOut && ( = ({ defaultMessage: 'Time range', }), ...createStepProps(WIZARD_STEPS.TIME_RANGE), + 'data-test-subj': 'mlJobWizardTimeRangeStep', }, { title: i18n.translate('xpack.ml.newJob.wizard.step.pickFieldsTitle', { defaultMessage: 'Choose fields', }), ...createStepProps(WIZARD_STEPS.PICK_FIELDS), + 'data-test-subj': 'mlJobWizardPickFieldsStep', }, { title: i18n.translate('xpack.ml.newJob.wizard.step.jobDetailsTitle', { defaultMessage: 'Job details', }), ...createStepProps(WIZARD_STEPS.JOB_DETAILS), + 'data-test-subj': 'mlJobWizardJobDetailsStep', }, { title: i18n.translate('xpack.ml.newJob.wizard.step.validationTitle', { defaultMessage: 'Validation', }), ...createStepProps(WIZARD_STEPS.VALIDATION), + 'data-test-subj': 'mlJobWizardValidationStep', }, { title: i18n.translate('xpack.ml.newJob.wizard.step.summaryTitle', { defaultMessage: 'Summary', }), ...createStepProps(WIZARD_STEPS.SUMMARY), + 'data-test-subj': 'mlJobWizardSummaryStep', }, ]; @@ -75,6 +80,7 @@ export const WizardHorizontalSteps: FC = ({ defaultMessage: 'Configure datafeed', }), ...createStepProps(WIZARD_STEPS.ADVANCED_CONFIGURE_DATAFEED), + 'data-test-subj': 'mlJobWizardAdvancedStep', }); } diff --git a/x-pack/plugins/ml/public/cases/anomaly_charts_attachments.tsx b/x-pack/plugins/ml/public/cases/anomaly_charts_attachments.tsx index 8b4ee9eb77b76..71b854100bd4d 100644 --- a/x-pack/plugins/ml/public/cases/anomaly_charts_attachments.tsx +++ b/x-pack/plugins/ml/public/cases/anomaly_charts_attachments.tsx @@ -5,20 +5,94 @@ * 2.0. */ -import type { FC } from 'react'; -import React from 'react'; +import React, { useMemo } from 'react'; import { memoize } from 'lodash'; import deepEqual from 'fast-deep-equal'; - +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { BehaviorSubject } from 'rxjs'; +import { css } from '@emotion/react'; import { FormattedMessage } from '@kbn/i18n-react'; import type { PersistableStateAttachmentViewProps } from '@kbn/cases-plugin/public/client/attachment_framework/types'; import { FIELD_FORMAT_IDS } from '@kbn/field-formats-plugin/common'; -import { EuiDescriptionList } from '@elastic/eui'; +import { EuiDescriptionList, htmlIdGenerator } from '@elastic/eui'; import type { FieldFormatsStart } from '@kbn/field-formats-plugin/public'; -import type { AnomalyChartsEmbeddableInput } from '../embeddables'; +import type { Filter, Query, TimeRange } from '@kbn/es-query'; +import { isPopulatedObject } from '@kbn/ml-is-populated-object'; +import { LazyAnomalyChartsContainer } from '../embeddables/anomaly_charts/lazy_anomaly_charts_container'; +import { initializeAnomalyChartsControls } from '../embeddables/anomaly_charts/initialize_anomaly_charts_controls'; +import type { + AnomalyChartsEmbeddableServices, + AnomalyChartsAttachmentState, + AnomalyChartsAttachmentApi, +} from '../embeddables'; + +interface AnomalyChartsCaseAttachmentProps extends AnomalyChartsAttachmentState { + services: AnomalyChartsEmbeddableServices; +} +const AnomalyChartsCaseAttachment = ({ + services, + ...rawState +}: AnomalyChartsCaseAttachmentProps) => { + const id = useMemo(() => htmlIdGenerator()(), []); + const [coreStartServices, pluginStartServices, mlServices] = services; + const contextServices = useMemo( + () => ({ + mlServices: { + ...mlServices, + }, + ...pluginStartServices, + ...coreStartServices, + }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [] + ); + + const api = useMemo(() => { + const initialState: AnomalyChartsAttachmentState = rawState ?? {}; + const filters$ = new BehaviorSubject(initialState.filters ?? []); + const query$ = new BehaviorSubject(initialState.query ?? undefined); + const timeRange$ = new BehaviorSubject(initialState.timeRange); -export const initComponent = memoize( - (fieldFormats: FieldFormatsStart, EmbeddableComponent: FC) => { + const anomalyChartsApi = initializeAnomalyChartsControls(initialState); + const combined: AnomalyChartsAttachmentApi = { + ...anomalyChartsApi.anomalyChartsControlsApi, + ...anomalyChartsApi.dataLoadingApi, + parentApi: { filters$, query$, timeRange$ }, + }; + return combined; + // Initialize services upon first mount already, + // as state management for cases + // already handled by the initial state + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( +
+ + + + + +
+ ); +}; + +function isValidTimeRange(arg: unknown): arg is TimeRange { + return isPopulatedObject(arg, ['from', 'to']); +} + +export const initializeAnomalyChartsAttachment = memoize( + (fieldFormats: FieldFormatsStart, services: AnomalyChartsEmbeddableServices) => { return React.memo( (props: PersistableStateAttachmentViewProps) => { const { persistableStateAttachmentState } = props; @@ -28,46 +102,59 @@ export const initComponent = memoize( }); const inputProps = - persistableStateAttachmentState as unknown as AnomalyChartsEmbeddableInput; + persistableStateAttachmentState as unknown as AnomalyChartsAttachmentState; + + const descriptions = useMemo(() => { + const listItems = [ + { + title: ( + + ), + description: inputProps.jobIds.join(', '), + }, + ]; - const listItems = [ - { - title: ( - - ), - description: inputProps.jobIds.join(', '), - }, - { - title: ( - - ), - description: `${dataFormatter.convert( - inputProps.timeRange.from - )} - ${dataFormatter.convert(inputProps.timeRange.to)}`, - }, - ]; + if (isValidTimeRange(inputProps.timeRange)) { + listItems.push({ + title: ( + + ), + description: `${dataFormatter.convert( + inputProps.timeRange.from + )} - ${dataFormatter.convert(inputProps.timeRange.to)}`, + }); + } - if (typeof inputProps.query?.query === 'string' && inputProps.query?.query !== '') { - listItems.push({ - title: ( - - ), - description: inputProps.query?.query, - }); - } + if (typeof inputProps.query?.query === 'string' && inputProps.query?.query !== '') { + listItems.push({ + title: ( + + ), + description: inputProps.query?.query, + }); + } + return listItems; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [ + dataFormatter, + inputProps.jobIds, + inputProps.query?.query, + inputProps.timeRange?.from, + inputProps.timeRange?.to, + ]); return ( <> - - + + ); }, diff --git a/x-pack/plugins/ml/public/cases/register_anomaly_charts_attachment.tsx b/x-pack/plugins/ml/public/cases/register_anomaly_charts_attachment.tsx index bb22df1d19934..cc5b00a35b805 100644 --- a/x-pack/plugins/ml/public/cases/register_anomaly_charts_attachment.tsx +++ b/x-pack/plugins/ml/public/cases/register_anomaly_charts_attachment.tsx @@ -11,21 +11,15 @@ import { FormattedMessage } from '@kbn/i18n-react'; import type { CasesPublicSetup } from '@kbn/cases-plugin/public'; import type { CoreStart } from '@kbn/core/public'; import { CASE_ATTACHMENT_TYPE_ID_ANOMALY_EXPLORER_CHARTS } from '../../common/constants/cases'; -import { getEmbeddableComponent } from '../embeddables'; import type { MlStartDependencies } from '../plugin'; import { PLUGIN_ICON } from '../../common/constants/app'; +import { getAnomalyChartsServiceDependencies } from '../embeddables/anomaly_charts/get_anomaly_charts_services_dependencies'; export function registerAnomalyChartsCasesAttachment( cases: CasesPublicSetup, coreStart: CoreStart, pluginStart: MlStartDependencies ) { - const EmbeddableComponent = getEmbeddableComponent( - CASE_ATTACHMENT_TYPE_ID_ANOMALY_EXPLORER_CHARTS, - coreStart, - pluginStart - ); - cases.attachmentFramework.registerPersistableState({ id: CASE_ATTACHMENT_TYPE_ID_ANOMALY_EXPLORER_CHARTS, icon: PLUGIN_ICON, @@ -41,9 +35,11 @@ export function registerAnomalyChartsCasesAttachment( ), timelineAvatar: PLUGIN_ICON, children: React.lazy(async () => { - const { initComponent } = await import('./anomaly_charts_attachments'); + const { initializeAnomalyChartsAttachment } = await import('./anomaly_charts_attachments'); + const services = await getAnomalyChartsServiceDependencies(coreStart, pluginStart); + return { - default: initComponent(pluginStart.fieldFormats, EmbeddableComponent), + default: initializeAnomalyChartsAttachment(pluginStart.fieldFormats, services), }; }), }), diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/__snapshots__/embeddable_anomaly_charts_container.test.tsx.snap b/x-pack/plugins/ml/public/embeddables/anomaly_charts/__snapshots__/embeddable_anomaly_charts_container.test.tsx.snap deleted file mode 100644 index f40d239b65be3..0000000000000 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/__snapshots__/embeddable_anomaly_charts_container.test.tsx.snap +++ /dev/null @@ -1,64 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`EmbeddableAnomalyChartsContainer should render explorer charts with a valid embeddable input 1`] = ` -Object { - "chartsData": Object { - "chartsPerRow": 2, - "errorMessages": undefined, - "seriesToPlot": Array [], - "timeFieldName": "@timestamp", - "tooManyBuckets": false, - }, - "chartsService": undefined, - "id": "test-explorer-charts-embeddable", - "mlLocator": undefined, - "onSelectEntity": [Function], - "setSeverity": [Function], - "severity": Object { - "color": "#fe5050", - "display": "critical", - "val": 75, - }, - "showCharts": true, - "showSelectedInterval": false, - "timeBuckets": TimeBuckets { - "_fieldFormats": undefined, - "_timeBucketsConfig": Object { - "dateFormat": undefined, - "dateFormat:scaled": undefined, - "histogram:barTarget": undefined, - "histogram:maxBars": undefined, - }, - "barTarget": undefined, - "maxBars": undefined, - }, - "timeRange": undefined, - "timefilter": Object { - "calculateBounds": [MockFunction], - "createFilter": [MockFunction], - "createRelativeFilter": [MockFunction], - "disableAutoRefreshSelector": [MockFunction], - "disableTimeRangeSelector": [MockFunction], - "enableAutoRefreshSelector": [MockFunction], - "enableTimeRangeSelector": [MockFunction], - "getAbsoluteTime": [MockFunction], - "getActiveBounds": [MockFunction], - "getAutoRefreshFetch$": [MockFunction], - "getBounds": [MockFunction], - "getEnabledUpdated$": [MockFunction], - "getFetch$": [MockFunction], - "getRefreshInterval": [MockFunction], - "getRefreshIntervalDefaults": [MockFunction], - "getRefreshIntervalUpdate$": [MockFunction], - "getTime": [MockFunction], - "getTimeDefaults": [MockFunction], - "getTimeUpdate$": [MockFunction], - "isAutoRefreshSelectorEnabled": [MockFunction], - "isRefreshIntervalTouched": [MockFunction], - "isTimeRangeSelectorEnabled": [MockFunction], - "isTimeTouched": [MockFunction], - "setRefreshInterval": [MockFunction], - "setTime": [MockFunction], - }, -} -`; diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable.tsx deleted file mode 100644 index 9d7b08fa935d0..0000000000000 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable.tsx +++ /dev/null @@ -1,143 +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, { Suspense } from 'react'; -import ReactDOM from 'react-dom'; -import type { CoreStart } from '@kbn/core/public'; -import { i18n } from '@kbn/i18n'; -import { Subject, Subscription, type BehaviorSubject } from 'rxjs'; -import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; -import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; -import type { IContainer } from '@kbn/embeddable-plugin/public'; -import { embeddableInputToSubject } from '@kbn/embeddable-plugin/public'; -import { embeddableOutputToSubject } from '@kbn/embeddable-plugin/public'; -import type { MlEntityField } from '@kbn/ml-anomaly-utils'; -import { EmbeddableAnomalyChartsContainer } from './embeddable_anomaly_charts_container_lazy'; -import type { JobId } from '../../../common/types/anomaly_detection_jobs'; -import type { MlDependencies } from '../../application/app'; -import type { - AnomalyChartsEmbeddableInput, - AnomalyChartsEmbeddableOutput, - AnomalyChartsServices, -} from '..'; -import { ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE } from '..'; -import { EmbeddableLoading } from '../common/components/embeddable_loading_fallback'; -import { AnomalyDetectionEmbeddable } from '../common/anomaly_detection_embeddable'; - -export const getDefaultExplorerChartsPanelTitle = (jobIds: JobId[]) => - i18n.translate('xpack.ml.anomalyChartsEmbeddable.title', { - defaultMessage: 'ML anomaly charts for {jobIds}', - values: { jobIds: jobIds.join(', ') }, - }); - -export type IAnomalyChartsEmbeddable = typeof AnomalyChartsEmbeddable; - -export class AnomalyChartsEmbeddable extends AnomalyDetectionEmbeddable< - AnomalyChartsEmbeddableInput, - AnomalyChartsEmbeddableOutput -> { - private node?: HTMLElement; - private reload$ = new Subject(); - public readonly type: string = ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE; - - // API - public readonly jobIds: BehaviorSubject; - public entityFields: BehaviorSubject; - - private apiSubscriptions = new Subscription(); - - constructor( - initialInput: AnomalyChartsEmbeddableInput, - public services: [CoreStart, MlDependencies, AnomalyChartsServices], - parent?: IContainer - ) { - super(initialInput, services[2].anomalyDetectorService, services[1].data.dataViews, parent); - - this.jobIds = embeddableInputToSubject( - this.apiSubscriptions, - this, - 'jobIds' - ); - - this.entityFields = embeddableOutputToSubject( - this.apiSubscriptions, - this, - 'entityFields' - ); - } - - public onLoading() { - this.renderComplete.dispatchInProgress(); - this.updateOutput({ loading: true, error: undefined }); - } - - public onError(error: Error) { - this.renderComplete.dispatchError(); - this.updateOutput({ loading: false, error: { name: error.name, message: error.message } }); - } - - public onRenderComplete() { - this.renderComplete.dispatchComplete(); - this.updateOutput({ loading: false, rendered: true, error: undefined }); - } - - public render(node: HTMLElement) { - super.render(node); - this.node = node; - - // required for the export feature to work - this.node.setAttribute('data-shared-item', ''); - - ReactDOM.render( - - - }> - - - - , - node - ); - } - - public destroy() { - super.destroy(); - - this.apiSubscriptions.unsubscribe(); - - if (this.node) { - ReactDOM.unmountComponentAtNode(this.node); - } - } - - public reload() { - this.reload$.next(); - } - - public supportedTriggers() { - return []; - } -} diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.test.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.test.ts deleted file mode 100644 index 4d82ca0b430c2..0000000000000 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.test.ts +++ /dev/null @@ -1,56 +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 { AnomalyChartsEmbeddableFactory } from './anomaly_charts_embeddable_factory'; -import { coreMock } from '@kbn/core/public/mocks'; -import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; -import { AnomalyChartsEmbeddable } from './anomaly_charts_embeddable'; -import type { AnomalyChartsEmbeddableInput } from '..'; - -jest.mock('./anomaly_charts_embeddable', () => ({ - AnomalyChartsEmbeddable: jest.fn(), -})); - -describe('AnomalyChartsEmbeddableFactory', () => { - test('should provide required services on create', async () => { - // arrange - const pluginStartDeps = { data: dataPluginMock.createStartContract() }; - - const getStartServices = coreMock.createSetup({ - pluginStartDeps, - }).getStartServices; - - const [coreStart, pluginsStart] = await getStartServices(); - - // act - const factory = new AnomalyChartsEmbeddableFactory(getStartServices); - - await factory.create({ - jobIds: ['test-job'], - maxSeriesToPlot: 4, - } as AnomalyChartsEmbeddableInput); - - // assert - const mockCalls = (AnomalyChartsEmbeddable as unknown as jest.Mock) - .mock.calls[0]; - const input = mockCalls[0]; - const createServices = mockCalls[1]; - - expect(input).toEqual({ - jobIds: ['test-job'], - maxSeriesToPlot: 4, - }); - expect(Object.keys(createServices[0])).toEqual(Object.keys(coreStart)); - expect(createServices[1]).toMatchObject(pluginsStart); - expect(Object.keys(createServices[2])).toEqual([ - 'anomalyDetectorService', - 'anomalyExplorerService', - 'mlFieldFormatService', - 'mlResultsService', - ]); - }); -}); diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.ts deleted file mode 100644 index 0ab25954ae7c0..0000000000000 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.ts +++ /dev/null @@ -1,123 +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 { i18n } from '@kbn/i18n'; - -import type { StartServicesAccessor } from '@kbn/core/public'; - -import type { EmbeddableFactoryDefinition, IContainer } from '@kbn/embeddable-plugin/public'; -import { PLUGIN_ICON, PLUGIN_ID, ML_APP_NAME } from '../../../common/constants/app'; -import { HttpService } from '../../application/services/http_service'; -import type { MlPluginStart, MlStartDependencies } from '../../plugin'; -import type { MlDependencies } from '../../application/app'; -import type { AnomalyChartsEmbeddableInput, AnomalyChartsEmbeddableServices } from '..'; -import { ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE } from '..'; -import { AnomalyExplorerChartsService } from '../../application/services/anomaly_explorer_charts_service'; - -export class AnomalyChartsEmbeddableFactory - implements EmbeddableFactoryDefinition -{ - public readonly type = ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE; - - public readonly grouping = [ - { - id: PLUGIN_ID, - getDisplayName: () => ML_APP_NAME, - getIconType: () => PLUGIN_ICON, - }, - ]; - - constructor( - private getStartServices: StartServicesAccessor - ) {} - - public async isEditable() { - return true; - } - - public getDisplayName() { - return i18n.translate('xpack.ml.components.mlAnomalyExplorerEmbeddable.displayName', { - defaultMessage: 'Anomaly chart', - }); - } - - public getDescription() { - return i18n.translate('xpack.ml.components.mlAnomalyExplorerEmbeddable.description', { - defaultMessage: 'View anomaly detection results in a chart.', - }); - } - - public async getExplicitInput(): Promise> { - const [coreStart, deps] = await this.getServices(); - - try { - const { resolveEmbeddableAnomalyChartsUserInput } = await import( - './anomaly_charts_setup_flyout' - ); - return await resolveEmbeddableAnomalyChartsUserInput(coreStart, deps.data.dataViews); - } catch (e) { - return Promise.reject(); - } - } - - private async getServices(): Promise { - const [ - [coreStart, pluginsStart], - { AnomalyDetectorService }, - { fieldFormatServiceFactory }, - { indexServiceFactory }, - { mlApiServicesProvider }, - { mlResultsServiceProvider }, - ] = await Promise.all([ - await this.getStartServices(), - await import('../../application/services/anomaly_detector_service'), - await import('../../application/services/field_format_service_factory'), - await import('../../application/util/index_service'), - await import('../../application/services/ml_api_service'), - await import('../../application/services/results_service'), - ]); - - const httpService = new HttpService(coreStart.http); - const anomalyDetectorService = new AnomalyDetectorService(httpService); - const mlApiServices = mlApiServicesProvider(httpService); - const mlResultsService = mlResultsServiceProvider(mlApiServices); - const anomalyExplorerService = new AnomalyExplorerChartsService( - pluginsStart.data.query.timefilter.timefilter, - mlApiServices, - mlResultsService - ); - - // Note on the following services: - // - `mlIndexUtils` is just instantiated here to be passed on to `mlFieldFormatService`, - // but it's not being made available as part of global services. Since it's just - // some stateless utils `useMlIndexUtils()` should be used from within components. - // - `mlFieldFormatService` is a stateful legacy service that relied on "dependency cache", - // so because of its own state it needs to be made available as a global service. - // In the long run we should again try to get rid of it here and make it available via - // its own context or possibly without having a singleton like state at all, since the - // way this manages its own state right now doesn't consider React component lifecycles. - const mlIndexUtils = indexServiceFactory(pluginsStart.data.dataViews); - const mlFieldFormatService = fieldFormatServiceFactory(mlApiServices, mlIndexUtils); - - return [ - coreStart, - pluginsStart as MlDependencies, - { - anomalyDetectorService, - anomalyExplorerService, - mlFieldFormatService, - mlResultsService, - }, - ]; - } - - public async create(initialInput: AnomalyChartsEmbeddableInput, parent?: IContainer) { - const services = await this.getServices(); - const { AnomalyChartsEmbeddable } = await import('./anomaly_charts_embeddable'); - return new AnomalyChartsEmbeddable(initialInput, services, parent); - } -} diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.tsx new file mode 100644 index 0000000000000..1dc792ffc44bf --- /dev/null +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_embeddable_factory.tsx @@ -0,0 +1,197 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; +import React from 'react'; +import type { StartServicesAccessor } from '@kbn/core/public'; +import type { Observable } from 'rxjs'; +import { Subscription, map } from 'rxjs'; +import { fetch$ } from '@kbn/presentation-publishing'; +import useUnmount from 'react-use/lib/useUnmount'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; +import { + apiHasExecutionContext, + initializeTimeRange, + initializeTitles, +} from '@kbn/presentation-publishing'; +import { distinctUntilChanged } from 'rxjs'; +import fastIsEqual from 'fast-deep-equal'; +import type { ReactEmbeddableFactory } from '@kbn/embeddable-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; +import { css } from '@emotion/react'; +import { useEuiTheme } from '@elastic/eui'; +import type { MlPluginStart, MlStartDependencies } from '../../plugin'; +import type { AnomalyChartsEmbeddableApi, AnomalyChartsEmbeddableState } from '..'; +import { ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE } from '..'; +import { useReactEmbeddableExecutionContext } from '../common/use_embeddable_execution_context'; +import { initializeAnomalyChartsControls } from './initialize_anomaly_charts_controls'; +import { LazyAnomalyChartsContainer } from './lazy_anomaly_charts_container'; +import { getAnomalyChartsServiceDependencies } from './get_anomaly_charts_services_dependencies'; +import { buildDataViewPublishingApi } from '../common/anomaly_detection_embeddable'; + +export const getAnomalyChartsReactEmbeddableFactory = ( + getStartServices: StartServicesAccessor +) => { + const factory: ReactEmbeddableFactory = + { + type: ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE, + deserializeState: (state) => state.rawState, + buildEmbeddable: async (state, buildApi, uuid, parentApi) => { + if (!apiHasExecutionContext(parentApi)) { + throw new Error('Parent API does not have execution context'); + } + const [coreStartServices, pluginsStartServices] = await getStartServices(); + const anomalyChartsDependencies = await getAnomalyChartsServiceDependencies( + coreStartServices, + pluginsStartServices + ); + + const [, , mlServices] = anomalyChartsDependencies; + + const subscriptions = new Subscription(); + + const { titlesApi, titleComparators, serializeTitles } = initializeTitles(state); + const { + api: timeRangeApi, + comparators: timeRangeComparators, + serialize: serializeTimeRange, + } = initializeTimeRange(state); + + const { + anomalyChartsControlsApi, + dataLoadingApi, + serializeAnomalyChartsState, + anomalyChartsComparators, + onAnomalyChartsDestroy, + } = initializeAnomalyChartsControls(state, titlesApi, parentApi); + + const api = buildApi( + { + isEditingEnabled: () => true, + getTypeDisplayName: () => + i18n.translate('xpack.ml.components.mlAnomalyExplorerEmbeddable.typeDisplayName', { + defaultMessage: 'anomaly charts', + }), + onEdit: async () => { + try { + const { resolveEmbeddableAnomalyChartsUserInput } = await import( + './anomaly_charts_setup_flyout' + ); + const result = await resolveEmbeddableAnomalyChartsUserInput( + coreStartServices, + pluginsStartServices, + parentApi, + uuid, + { + ...serializeTitles(), + ...serializeAnomalyChartsState(), + } + ); + anomalyChartsControlsApi.updateUserInput(result); + } catch (e) { + // eslint-disable-next-line no-console + console.error(e); + return Promise.reject(); + } + }, + ...titlesApi, + ...timeRangeApi, + ...anomalyChartsControlsApi, + ...dataLoadingApi, + dataViews: buildDataViewPublishingApi( + { + anomalyDetectorService: mlServices.anomalyDetectorService, + dataViewsService: pluginsStartServices.data.dataViews, + }, + { jobIds: anomalyChartsControlsApi.jobIds$ }, + subscriptions + ), + serializeState: () => { + return { + rawState: { + timeRange: undefined, + ...serializeTitles(), + ...serializeTimeRange(), + ...serializeAnomalyChartsState(), + }, + references: [], + }; + }, + }, + { + ...timeRangeComparators, + ...titleComparators, + ...anomalyChartsComparators, + } + ); + + const appliedTimeRange$: Observable = fetch$(api).pipe( + map((fetchContext) => fetchContext.timeRange), + distinctUntilChanged(fastIsEqual) + ); + + const { onRenderComplete, onLoading, onError } = dataLoadingApi; + const contextServices = { + mlServices: { + ...mlServices, + }, + ...coreStartServices, + ...pluginsStartServices, + }; + + return { + api, + Component: () => { + if (!apiHasExecutionContext(parentApi)) { + throw new Error('Parent API does not have execution context'); + } + + useReactEmbeddableExecutionContext( + coreStartServices.executionContext, + parentApi.executionContext, + ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE, + uuid + ); + + useUnmount(() => { + onAnomalyChartsDestroy(); + subscriptions.unsubscribe(); + }); + const { euiTheme } = useEuiTheme(); + + return ( + + +
+ +
+
+
+ ); + }, + }; + }, + }; + return factory; +}; diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_initializer.test.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_initializer.test.tsx index 9bfce47aa9dc1..4c68437933175 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_initializer.test.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_initializer.test.tsx @@ -5,45 +5,62 @@ * 2.0. */ -import { render, screen } from '@testing-library/react'; +import { render, screen, act } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import type { MlApiServices } from '../../application/services/ml_api_service'; import { AnomalyChartsInitializer } from './anomaly_charts_initializer'; import { I18nProvider } from '@kbn/i18n-react'; import React from 'react'; -import { getDefaultExplorerChartsPanelTitle } from './anomaly_charts_embeddable'; +import { getDefaultExplorerChartsPanelTitle } from './utils'; +import { kibanaContextMock } from '../../application/contexts/kibana/__mocks__/kibana_context'; +import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public/context/context'; const defaultOptions = { wrapper: I18nProvider }; +jest.mock('../../application/services/anomaly_detector_service', () => { + return { + AnomalyDetectorService: jest.fn().mockImplementation(() => { + return { + getJobs$: jest.fn(), + }; + }), + }; +}); describe('AnomalyChartsInitializer', () => { test('should render anomaly charts initializer', async () => { const onCreate = jest.fn(); const onCancel = jest.fn(); + const adJobsApiService = jest.fn(); - const jobIds = ['test-job']; + const jobIds = ['job1', 'job2']; const defaultTitle = getDefaultExplorerChartsPanelTitle(jobIds); const input = { maxSeriesToPlot: 12, + jobIds, }; - const { getByTestId } = render( - onCreate(params)} - onCancel={onCancel} - />, + render( + + onCreate(params)} + onCancel={onCancel} + adJobsApiService={adJobsApiService as unknown as MlApiServices['jobs']} + /> + , defaultOptions ); - const confirmButton = screen.getByText(/Confirm/i).closest('button'); - expect(confirmButton).toBeDefined(); - expect(onCreate).toHaveBeenCalledTimes(0); - userEvent.click(confirmButton!); - expect(onCreate).toHaveBeenCalledWith({ - panelTitle: defaultTitle, - maxSeriesToPlot: input.maxSeriesToPlot, - }); + act(() => { + const confirmButton = screen.getByText(/Confirm/i).closest('button'); + expect(confirmButton).toBeDefined(); + expect(onCreate).toHaveBeenCalledTimes(0); - userEvent.clear(await getByTestId('panelTitleInput')); - expect(confirmButton).toHaveAttribute('disabled'); + userEvent.click(confirmButton!); + expect(onCreate).toHaveBeenCalledWith({ + jobIds: ['job1', 'job2'], + title: defaultTitle, + maxSeriesToPlot: input.maxSeriesToPlot, + }); + }); }); }); 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 add35ce0e19ce..536084cc01496 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 @@ -6,64 +6,101 @@ */ import type { FC } from 'react'; -import React, { useState } from 'react'; +import React, { useState, useRef, useEffect } from 'react'; import { EuiButton, EuiButtonEmpty, EuiForm, EuiFormRow, - EuiModalBody, - EuiModalFooter, - EuiModalHeader, - EuiModalHeaderTitle, + EuiFlyoutBody, + EuiFlyoutFooter, + EuiFlyoutHeader, + EuiTitle, EuiFieldNumber, EuiFieldText, - EuiModal, + EuiSpacer, + EuiFlexGroup, } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { AnomalyChartsEmbeddableInput } from '..'; +import type { AnomalyChartsEmbeddableState } from '..'; import { DEFAULT_MAX_SERIES_TO_PLOT } from '../../application/services/anomaly_explorer_charts_service'; +import { JobSelectorControl } from '../../alerting/job_selector'; +import { ML_PAGES } from '../../../common/constants/locator'; +import { getDefaultExplorerChartsPanelTitle } from './utils'; +import { useMlLink } from '../../application/contexts/kibana'; +import { getJobSelectionErrors } from '../utils'; +import type { MlApiServices } from '../../application/services/ml_api_service'; export const MAX_ANOMALY_CHARTS_ALLOWED = 50; export interface AnomalyChartsInitializerProps { - defaultTitle: string; - initialInput?: Partial>; - onCreate: (props: { panelTitle: string; maxSeriesToPlot?: number }) => void; + initialInput?: Partial< + Pick + >; + onCreate: (props: { + jobIds: AnomalyChartsEmbeddableState['jobIds']; + title: string; + maxSeriesToPlot?: number; + }) => void; onCancel: () => void; + adJobsApiService: MlApiServices['jobs']; } export const AnomalyChartsInitializer: FC = ({ - defaultTitle, initialInput, onCreate, onCancel, + adJobsApiService, }) => { - const [panelTitle, setPanelTitle] = useState(defaultTitle); + const titleManuallyChanged = useRef(!!initialInput?.title); + + const [panelTitle, setPanelTitle] = useState(initialInput?.title ?? ''); const [maxSeriesToPlot, setMaxSeriesToPlot] = useState( initialInput?.maxSeriesToPlot ?? DEFAULT_MAX_SERIES_TO_PLOT ); - - const isPanelTitleValid = panelTitle.length > 0; + const isPanelTitleValid = panelTitle?.length > 0; const isMaxSeriesToPlotValid = maxSeriesToPlot >= 1 && maxSeriesToPlot <= MAX_ANOMALY_CHARTS_ALLOWED; - const isFormValid = isPanelTitleValid && isMaxSeriesToPlotValid; + const newJobUrl = useMlLink({ page: ML_PAGES.ANOMALY_DETECTION_CREATE_JOB }); + + const [jobIds, setJobIds] = useState(initialInput?.jobIds ?? []); + const jobIdsErrors = getJobSelectionErrors(jobIds); + + const isFormValid = isPanelTitleValid && isMaxSeriesToPlotValid && jobIdsErrors === undefined; + + useEffect( + function updateDefaultTitle() { + if (!titleManuallyChanged.current) { + setPanelTitle(getDefaultExplorerChartsPanelTitle(jobIds)); + } + }, + [initialInput?.title, jobIds] + ); return ( - - - - - - + <> + + +

+ +

+
+
- + + { + setJobIds([...(update?.jobIds ?? []), ...(update?.groupIds ?? [])]); + }} + errors={jobIdsErrors} + /> + = ({ id="panelTitle" name="panelTitle" value={panelTitle} - onChange={(e) => setPanelTitle(e.target.value)} + onChange={(e) => { + titleManuallyChanged.current = true; + setPanelTitle(e.target.value); + }} isInvalid={!isPanelTitleValid} /> @@ -112,31 +152,37 @@ export const AnomalyChartsInitializer: FC = ({ /> - + - - - - + + + + + - - - - -
+ + + + + + ); }; diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_react_container.tsx similarity index 76% rename from x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container.tsx rename to x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_react_container.tsx index e7c5ce816b02b..d31ee17ef0780 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/anomaly_charts_react_container.tsx @@ -12,20 +12,19 @@ import type { Observable } from 'rxjs'; import { FormattedMessage } from '@kbn/i18n-react'; import { throttle } from 'lodash'; import { UI_SETTINGS } from '@kbn/data-plugin/common'; -import useObservable from 'react-use/lib/useObservable'; import { type MlEntityField, type MlEntityFieldOperation, ML_ANOMALY_THRESHOLD, } from '@kbn/ml-anomaly-utils'; import { TimeBuckets } from '@kbn/ml-time-buckets'; -import { useEmbeddableExecutionContext } from '../common/use_embeddable_execution_context'; -import { useAnomalyChartsInputResolver } from './use_anomaly_charts_input_resolver'; -import type { IAnomalyChartsEmbeddable } from './anomaly_charts_embeddable'; +import useObservable from 'react-use/lib/useObservable'; +import type { TimeRange } from '@kbn/es-query'; import type { - AnomalyChartsEmbeddableInput, - AnomalyChartsEmbeddableOutput, + AnomalyChartsEmbeddableOverridableState, AnomalyChartsEmbeddableServices, + AnomalyChartsApi, + AnomalyChartsAttachmentApi, } from '..'; import { ExplorerAnomaliesContainer } from '../../application/explorer/explorer_charts/explorer_anomalies_container'; @@ -33,52 +32,43 @@ import { ML_APP_LOCATOR } from '../../../common/constants/locator'; import { optionValueToThreshold } from '../../application/components/controls/select_severity/select_severity'; import { EXPLORER_ENTITY_FIELD_SELECTION_TRIGGER } from '../../ui_actions/triggers'; import type { MlLocatorParams } from '../../../common/types/locator'; -import { ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE } from '..'; +import { useAnomalyChartsData } from './use_anomaly_charts_data'; const RESIZE_THROTTLE_TIME_MS = 500; -export interface EmbeddableAnomalyChartsContainerProps { +export interface AnomalyChartsContainerProps + extends Partial { + lastReloadRequestTime?: number; + api: AnomalyChartsApi | AnomalyChartsAttachmentApi; id: string; - embeddableContext: InstanceType; - embeddableInput: Observable; services: AnomalyChartsEmbeddableServices; - refresh: Observable; - onInputChange: (input: Partial) => void; - onOutputChange: (output: Partial) => void; + timeRange$: Observable; onRenderComplete: () => void; - onLoading: () => void; + onLoading: (v: boolean) => void; onError: (error: Error) => void; } -export const EmbeddableAnomalyChartsContainer: FC = ({ +const AnomalyChartsContainer: FC = ({ id, - embeddableContext, - embeddableInput, + timeRange$, + severityThreshold, services, - refresh, - onInputChange, - onOutputChange, onRenderComplete, onError, onLoading, + api, }) => { - useEmbeddableExecutionContext( - services[0].executionContext, - embeddableInput, - ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE, - id - ); - const [chartWidth, setChartWidth] = useState(0); const [severity, setSeverity] = useState( optionValueToThreshold( - embeddableContext.getInput().severityThreshold ?? ML_ANOMALY_THRESHOLD.WARNING + severityThreshold !== undefined ? severityThreshold : ML_ANOMALY_THRESHOLD.WARNING ) ); const [selectedEntities, setSelectedEntities] = useState(); const [{ uiSettings }, { data: dataServices, share, uiActions, charts: chartsService }] = services; const { timefilter } = dataServices.query.timefilter; + const timeRange = useObservable(timeRange$); const mlLocator = useMemo( () => share.url.locators.get(ML_APP_LOCATOR)!, @@ -95,32 +85,28 @@ export const EmbeddableAnomalyChartsContainer: FC { + if (api?.updateSeverityThreshold) { + api.updateSeverityThreshold(severity.val); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [severity.val, api?.updateSeverityThreshold]); useEffect(() => { - onInputChange({ - severityThreshold: severity.val, - }); - onOutputChange({ - severity: severity.val, - entityFields: selectedEntities, - }); + if (api?.updateSelectedEntities) { + api.updateSelectedEntities(selectedEntities); + } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [severity, selectedEntities]); + }, [selectedEntities, api?.updateSelectedEntities]); + const renderCallbacks = useMemo(() => { + return { onRenderComplete, onError, onLoading }; + }, [onRenderComplete, onError, onLoading]); const { chartsData, isLoading: isExplorerLoading, error, - } = useAnomalyChartsInputResolver( - embeddableInput, - onInputChange, - refresh, - services, - chartWidth, - severity.val, - { onRenderComplete, onError, onLoading } - ); + } = useAnomalyChartsData(api, services, chartWidth, severity.val, renderCallbacks); // Holds the container height for previously fetched data const containerHeightRef = useRef(); @@ -176,7 +162,7 @@ export const EmbeddableAnomalyChartsContainer: FC {isExplorerLoading && ( @@ -213,7 +199,7 @@ export const EmbeddableAnomalyChartsContainer: FC )} - {chartsData !== undefined && isExplorerLoading === false && ( + {chartsData !== undefined && isExplorerLoading === false ? ( - )} + ) : null}
)} @@ -237,4 +223,4 @@ export const EmbeddableAnomalyChartsContainer: FC> { + pluginStart: MlStartDependencies, + parentApi: unknown, + focusedPanelId: string, + input?: Partial> +): Promise> { const { http, overlays, ...startServices } = coreStart; - - const { getJobs } = mlApiServicesProvider(new HttpService(http)); + const adJobsApiService = jobsApiProvider(new HttpService(http)); + const mlServices = getMlGlobalServices(http, pluginStart.data.dataViews); + const overlayTracker = tracksOverlays(parentApi) ? parentApi : undefined; return new Promise(async (resolve, reject) => { try { - const { jobIds } = await resolveJobSelection(coreStart, dataViews, input?.jobIds); - const title = input?.title ?? getDefaultExplorerChartsPanelTitle(jobIds); - const { jobs } = await getJobs({ jobId: jobIds.join(',') }); - const influencers = extractInfluencers(jobs); - influencers.push(VIEW_BY_JOB_LABEL); - const modalSession = overlays.openModal( + const flyoutSession = overlays.openFlyout( toMountPoint( - { - modalSession.close(); - resolve({ - jobIds, - title: panelTitle, - maxSeriesToPlot, - }); - }} - onCancel={() => { - modalSession.close(); - reject(); - }} - />, + + { + resolve({ + jobIds, + title, + maxSeriesToPlot, + } as Pick); + flyoutSession.close(); + overlayTracker?.clearOverlays(); + }} + onCancel={() => { + reject(); + flyoutSession.close(); + overlayTracker?.clearOverlays(); + }} + adJobsApiService={adJobsApiService} + /> + , startServices - ) + ), + { + type: 'push', + ownFocus: true, + size: 's', + onClose: () => { + reject(); + flyoutSession.close(); + overlayTracker?.clearOverlays(); + }, + 'data-test-subj': 'mlAnomalyChartsEmbeddableInitializer', + } ); + if (tracksOverlays(parentApi)) { + parentApi.openOverlay(flyoutSession, { + focusedPanelId, + }); + } } catch (error) { reject(error); } diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container.test.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container.test.tsx deleted file mode 100644 index 0bca926ad6873..0000000000000 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container.test.tsx +++ /dev/null @@ -1,189 +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 { render } from '@testing-library/react'; -import type { EmbeddableAnomalyChartsContainerProps } from './embeddable_anomaly_charts_container'; -import { EmbeddableAnomalyChartsContainer } from './embeddable_anomaly_charts_container'; -import type { Observable } from 'rxjs'; -import { BehaviorSubject, of } from 'rxjs'; -import { I18nProvider } from '@kbn/i18n-react'; -import type { AnomalyChartsEmbeddable } from './anomaly_charts_embeddable'; -import type { CoreStart } from '@kbn/core/public'; -import { useAnomalyChartsInputResolver } from './use_anomaly_charts_input_resolver'; -import type { MlDependencies } from '../../application/app'; -import type { TriggerContract } from '@kbn/ui-actions-plugin/public/triggers'; -import type { AnomalyChartsEmbeddableInput, AnomalyChartsServices } from '..'; -import { ExplorerAnomaliesContainer } from '../../application/explorer/explorer_charts/explorer_anomalies_container'; -import { createMlResultsServiceMock } from '../../application/services/ml_results_service'; -import { createCoreStartMock } from '../../__mocks__/core_start'; -import { createMlStartDepsMock } from '../../__mocks__/ml_start_deps'; -import { createAnomalyExplorerChartsServiceMock } from '../../application/services/__mocks__/anomaly_explorer_charts_service'; -import { createAnomalyDetectorServiceMock } from '../../application/services/__mocks__/anomaly_detector_service'; - -jest.mock('./use_anomaly_charts_input_resolver', () => ({ - useAnomalyChartsInputResolver: jest.fn(() => { - return []; - }), -})); - -jest.mock('../../application/explorer/explorer_charts/explorer_anomalies_container', () => ({ - ExplorerAnomaliesContainer: jest.fn(() => { - return null; - }), -})); - -const defaultOptions = { wrapper: I18nProvider }; - -describe('EmbeddableAnomalyChartsContainer', () => { - let embeddableInput: BehaviorSubject>; - let refresh: BehaviorSubject; - let services: jest.Mocked<[CoreStart, MlDependencies, AnomalyChartsServices]>; - let embeddableContext: jest.Mocked; - let trigger: jest.Mocked; - - const onInputChange = jest.fn(); - const onOutputChange = jest.fn(); - const onRenderComplete = jest.fn(); - const onLoading = jest.fn(); - const onError = jest.fn(); - - const mockedInput = { - viewMode: 'view', - filters: [], - hidePanelTitles: false, - query: { - language: 'lucene', - query: 'instance:i-d**', - }, - timeRange: { - from: 'now-3y', - to: 'now', - }, - refreshConfig: { - value: 0, - pause: true, - }, - id: 'b5b2f600-9c7e-4f7d-8b82-ee156fffad27', - searchSessionId: 'e8d052f8-0d9a-4d80-819d-fe18d9b314fa', - syncColors: true, - title: 'ML anomaly explorer charts for cw_multi_1', - jobIds: ['cw_multi_1'], - maxSeriesToPlot: 12, - enhancements: {}, - severity: 50, - severityThreshold: 75, - } as AnomalyChartsEmbeddableInput; - - beforeEach(() => { - // we only want to mock some of the functions needed - // @ts-ignore - embeddableContext = { - id: 'test-id', - getInput: jest.fn(), - }; - embeddableContext.getInput.mockReturnValue(mockedInput); - - embeddableInput = new BehaviorSubject({ - id: 'test-explorer-charts-embeddable', - } as Partial); - - trigger = { exec: jest.fn() } as unknown as jest.Mocked; - - const mlStartMock = createMlStartDepsMock(); - mlStartMock.uiActions.getTrigger.mockReturnValue(trigger); - - const coreStartMock = createCoreStartMock(); - const anomalyDetectorServiceMock = createAnomalyDetectorServiceMock(); - - anomalyDetectorServiceMock.getJobs$.mockImplementation((jobId: string[]) => { - if (jobId.includes('invalid-job-id')) { - throw new Error('Invalid job'); - } - return of([ - { - job_id: 'cw_multi_1', - analysis_config: { bucket_span: '15m' }, - }, - ]); - }); - - services = [ - coreStartMock, - mlStartMock, - { - anomalyDetectorService: anomalyDetectorServiceMock, - anomalyExplorerChartsService: createAnomalyExplorerChartsServiceMock(), - mlResultsService: createMlResultsServiceMock(), - }, - ] as unknown as EmbeddableAnomalyChartsContainerProps['services']; - }); - - test('should render explorer charts with a valid embeddable input', async () => { - const chartsData = { - chartsPerRow: 2, - seriesToPlot: [], - tooManyBuckets: false, - timeFieldName: '@timestamp', - errorMessages: undefined, - }; - - (useAnomalyChartsInputResolver as jest.Mock).mockReturnValueOnce({ - chartsData, - isLoading: false, - error: undefined, - }); - - render( - } - services={services} - refresh={refresh} - onInputChange={onInputChange} - onOutputChange={onOutputChange} - onLoading={onLoading} - onRenderComplete={onRenderComplete} - onError={onError} - />, - defaultOptions - ); - - const calledWith = ( - ExplorerAnomaliesContainer as unknown as jest.Mock - ).mock.calls[0][0]; - - expect(calledWith).toMatchSnapshot(); - }); - - test('should render an error in case it could not fetch the ML charts data', async () => { - (useAnomalyChartsInputResolver as jest.Mock).mockReturnValue({ - chartsData: undefined, - isLoading: false, - error: 'No anomalies', - }); - - const { findByText } = render( - } - services={services} - refresh={refresh} - onInputChange={onInputChange} - onOutputChange={onOutputChange} - onLoading={onLoading} - onRenderComplete={onRenderComplete} - onError={onError} - />, - defaultOptions - ); - const errorMessage = await findByText('Unable to load the data for the anomaly charts'); - expect(errorMessage).toBeDefined(); - }); -}); diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/get_anomaly_charts_services_dependencies.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/get_anomaly_charts_services_dependencies.ts new file mode 100644 index 0000000000000..b0c365088beed --- /dev/null +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/get_anomaly_charts_services_dependencies.ts @@ -0,0 +1,64 @@ +/* + * 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 { CoreStart } from '@kbn/core/public'; +import { HttpService } from '../../application/services/http_service'; +import type { MlStartDependencies } from '../../plugin'; +import type { MlDependencies } from '../../application/app'; +import type { AnomalyChartsEmbeddableServices } from '..'; +import { AnomalyExplorerChartsService } from '../../application/services/anomaly_explorer_charts_service'; + +export const getAnomalyChartsServiceDependencies = async ( + coreStartServices: CoreStart, + pluginsStartServices: MlStartDependencies +): Promise => { + const [ + { AnomalyDetectorService }, + { fieldFormatServiceFactory }, + { indexServiceFactory }, + { mlApiServicesProvider }, + { mlResultsServiceProvider }, + ] = await Promise.all([ + await import('../../application/services/anomaly_detector_service'), + await import('../../application/services/field_format_service_factory'), + await import('../../application/util/index_service'), + await import('../../application/services/ml_api_service'), + await import('../../application/services/results_service'), + ]); + const httpService = new HttpService(coreStartServices.http); + const anomalyDetectorService = new AnomalyDetectorService(httpService); + const mlApiServices = mlApiServicesProvider(httpService); + const mlResultsService = mlResultsServiceProvider(mlApiServices); + const anomalyExplorerService = new AnomalyExplorerChartsService( + pluginsStartServices.data.query.timefilter.timefilter, + mlApiServices, + mlResultsService + ); + + // Note on the following services: + // - `mlIndexUtils` is just instantiated here to be passed on to `mlFieldFormatService`, + // but it's not being made available as part of global services. Since it's just + // some stateless utils `useMlIndexUtils()` should be used from within components. + // - `mlFieldFormatService` is a stateful legacy service that relied on "dependency cache", + // so because of its own state it needs to be made available as a global service. + // In the long run we should again try to get rid of it here and make it available via + // its own context or possibly without having a singleton like state at all, since the + // way this manages its own state right now doesn't consider React component lifecycles. + const mlIndexUtils = indexServiceFactory(pluginsStartServices.data.dataViews); + const mlFieldFormatService = fieldFormatServiceFactory(mlApiServices, mlIndexUtils); + + const anomalyChartsEmbeddableServices: AnomalyChartsEmbeddableServices = [ + coreStartServices, + pluginsStartServices as MlDependencies, + { + anomalyDetectorService, + anomalyExplorerService, + mlFieldFormatService, + mlResultsService, + }, + ]; + return anomalyChartsEmbeddableServices; +}; diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/index.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/index.ts index 7ee763b893367..71e5d9e71dd70 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/index.ts +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/index.ts @@ -5,4 +5,4 @@ * 2.0. */ -export { AnomalyChartsEmbeddableFactory } from './anomaly_charts_embeddable_factory'; +export { getAnomalyChartsReactEmbeddableFactory } from './anomaly_charts_embeddable_factory'; diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/initialize_anomaly_charts_controls.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/initialize_anomaly_charts_controls.ts new file mode 100644 index 0000000000000..b5ed19391237b --- /dev/null +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/initialize_anomaly_charts_controls.ts @@ -0,0 +1,100 @@ +/* + * 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 { TitlesApi } from '@kbn/presentation-publishing/interfaces/titles/titles_api'; +import { BehaviorSubject } from 'rxjs'; +import fastIsEqual from 'fast-deep-equal'; +import type { MlEntityField } from '@kbn/ml-anomaly-utils'; +import type { StateComparators } from '@kbn/presentation-publishing'; +import type { JobId } from '../../../common/types/anomaly_detection_jobs'; +import { DEFAULT_MAX_SERIES_TO_PLOT } from '../../application/services/anomaly_explorer_charts_service'; +import type { + AnomalyChartsComponentApi, + AnomalyChartsDataLoadingApi, + AnomalyChartsEmbeddableRuntimeState, + AnomalyChartsEmbeddableState, +} from '../types'; + +export const initializeAnomalyChartsControls = ( + rawState: AnomalyChartsEmbeddableState, + titlesApi?: TitlesApi, + parentApi?: unknown +) => { + const jobIds$ = new BehaviorSubject(rawState.jobIds); + const maxSeriesToPlot$ = new BehaviorSubject( + rawState.maxSeriesToPlot ?? DEFAULT_MAX_SERIES_TO_PLOT + ); + const severityThreshold$ = new BehaviorSubject(rawState.severityThreshold); + const selectedEntities$ = new BehaviorSubject( + rawState.selectedEntities + ); + const interval$ = new BehaviorSubject(undefined); + const dataLoading$ = new BehaviorSubject(true); + const blockingError$ = new BehaviorSubject(undefined); + + const updateUserInput = (update: AnomalyChartsEmbeddableState) => { + jobIds$.next(update.jobIds); + maxSeriesToPlot$.next(update.maxSeriesToPlot); + if (titlesApi) { + titlesApi.setPanelTitle(update.title); + } + }; + + const updateSeverityThreshold = (v: number) => severityThreshold$.next(v); + const updateSelectedEntities = (v: MlEntityField[]) => selectedEntities$.next(v); + const setInterval = (v: number) => interval$.next(v); + + const serializeAnomalyChartsState = (): AnomalyChartsEmbeddableState => { + return { + jobIds: jobIds$.value, + maxSeriesToPlot: maxSeriesToPlot$.value, + severityThreshold: severityThreshold$.value, + selectedEntities: selectedEntities$.value, + }; + }; + + const anomalyChartsComparators: StateComparators = { + jobIds: [jobIds$, (arg: JobId[]) => jobIds$.next(arg), fastIsEqual], + maxSeriesToPlot: [maxSeriesToPlot$, (arg: number) => maxSeriesToPlot$.next(arg)], + severityThreshold: [severityThreshold$, (arg?: number) => severityThreshold$.next(arg)], + selectedEntities: [ + selectedEntities$, + (arg?: MlEntityField[]) => selectedEntities$.next(arg), + fastIsEqual, + ], + }; + const onRenderComplete = () => dataLoading$.next(false); + const onLoading = (v: boolean) => dataLoading$.next(v); + const onError = (error?: Error) => blockingError$.next(error); + + return { + anomalyChartsControlsApi: { + jobIds$, + maxSeriesToPlot$, + severityThreshold$, + selectedEntities$, + updateUserInput, + updateSeverityThreshold, + updateSelectedEntities, + } as AnomalyChartsComponentApi, + dataLoadingApi: { + dataLoading: dataLoading$, + setInterval, + onRenderComplete, + onLoading, + onError, + } as AnomalyChartsDataLoadingApi, + serializeAnomalyChartsState, + anomalyChartsComparators, + onAnomalyChartsDestroy: () => { + jobIds$.complete(); + maxSeriesToPlot$.complete(); + severityThreshold$.complete(); + selectedEntities$.complete(); + }, + }; +}; diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container_lazy.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_charts/lazy_anomaly_charts_container.ts similarity index 62% rename from x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container_lazy.tsx rename to x-pack/plugins/ml/public/embeddables/anomaly_charts/lazy_anomaly_charts_container.ts index 38f48ea4a018b..76abe473f3c9e 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/embeddable_anomaly_charts_container_lazy.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/lazy_anomaly_charts_container.ts @@ -4,9 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { dynamic } from '@kbn/shared-ux-utility'; -import React from 'react'; - -export const EmbeddableAnomalyChartsContainer = React.lazy( - () => import('./embeddable_anomaly_charts_container') -); +export const LazyAnomalyChartsContainer = dynamic(() => import('./anomaly_charts_react_container')); diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/types.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/types.ts deleted file mode 100644 index 0c6ddf3a9e35c..0000000000000 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/types.ts +++ /dev/null @@ -1,20 +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 type { MlEntityField } from '@kbn/ml-anomaly-utils'; -import type { PublishingSubject } from '@kbn/presentation-publishing'; -import type { JobId } from '../../../common/types/anomaly_detection_jobs'; -import type { MlEmbeddableBaseApi } from '../types'; - -export interface AnomalyChartsFieldSelectionApi { - jobIds: PublishingSubject; - entityFields: PublishingSubject; -} - -export interface AnomalyChartsEmbeddableApi - extends MlEmbeddableBaseApi, - AnomalyChartsFieldSelectionApi {} diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/use_anomaly_charts_data.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/use_anomaly_charts_data.ts new file mode 100644 index 0000000000000..ee7acdba2ab55 --- /dev/null +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/use_anomaly_charts_data.ts @@ -0,0 +1,170 @@ +/* + * 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 { useState, useMemo, useEffect } from 'react'; +import { combineLatest, tap, debounceTime, switchMap, skipWhile, of } from 'rxjs'; +import { Subject, catchError } from 'rxjs'; +import type { InfluencersFilterQuery } from '@kbn/ml-anomaly-utils'; +import type { CoreStart } from '@kbn/core/public'; +import { fetch$ } from '@kbn/presentation-publishing'; +import type { AnomalyChartsServices, AnomalyChartsApi } from '..'; +import { getJobsObservable } from '../common/get_jobs_observable'; +import { OVERALL_LABEL, SWIMLANE_TYPE } from '../../application/explorer/explorer_constants'; +import { processFilters } from '../common/process_filters'; +import type { AppStateSelectedCells } from '../../application/explorer/explorer_utils'; +import { + getSelectionInfluencers, + getSelectionJobIds, + getSelectionTimeRange, +} from '../../application/explorer/explorer_utils'; +import type { ExplorerChartsData } from '../../application/explorer/explorer_charts/explorer_charts_container_service'; +import type { MlStartDependencies } from '../../plugin'; + +const FETCH_RESULTS_DEBOUNCE_MS = 500; + +export function useAnomalyChartsData( + api: AnomalyChartsApi, + services: [CoreStart, MlStartDependencies, AnomalyChartsServices], + chartWidth: number, + severity: number, + renderCallbacks: { + onRenderComplete: () => void; + onLoading: (v: boolean) => void; + onError: (error: Error) => void; + } +): { + chartsData: ExplorerChartsData | undefined; + isLoading: boolean; + error: Error | null | undefined; +} { + const [, , { anomalyDetectorService, anomalyExplorerService }] = services; + + const [chartsData, setChartsData] = useState(); + const [error, setError] = useState(); + const [isLoading, setIsLoading] = useState(false); + + const chartWidth$ = useMemo(() => new Subject(), []); + const severity$ = useMemo(() => new Subject(), []); + + useEffect(() => { + const subscription = combineLatest({ + explorerJobs: getJobsObservable(api.jobIds$, anomalyDetectorService, setError), + maxSeriesToPlot: api.maxSeriesToPlot$, + chartWidth: chartWidth$.pipe(skipWhile((v) => !v)), + severityValue: severity$, + dataPublishingServices: fetch$(api), + }) + .pipe( + tap(setIsLoading.bind(null, true)), + debounceTime(FETCH_RESULTS_DEBOUNCE_MS), + tap(() => { + renderCallbacks.onLoading(true); + }), + switchMap( + ({ + explorerJobs, + maxSeriesToPlot, + chartWidth: embeddableContainerWidth, + severityValue, + dataPublishingServices, + }) => { + const { timeRange: timeRangeInput, filters, query } = dataPublishingServices; + if (!explorerJobs) { + // couldn't load the list of jobs + return of(undefined); + } + + const viewBySwimlaneFieldName = OVERALL_LABEL; + + if (timeRangeInput) { + anomalyExplorerService.setTimeRange(timeRangeInput); + } + + let influencersFilterQuery: InfluencersFilterQuery | undefined; + try { + if (filters || query) { + influencersFilterQuery = processFilters(filters, query); + } + } catch (e) { + // handle query syntax errors + setError(e); + return of(undefined); + } + + const bounds = anomalyExplorerService.getTimeBounds(); + + // Can be from input time range or from the timefilter bar + const selections: AppStateSelectedCells = { + lanes: [OVERALL_LABEL], + times: [bounds.min?.unix()!, bounds.max?.unix()!], + type: SWIMLANE_TYPE.OVERALL, + }; + + const selectionInfluencers = getSelectionInfluencers( + selections, + viewBySwimlaneFieldName + ); + + const jobIds = getSelectionJobIds(selections, explorerJobs); + + const timeRange = getSelectionTimeRange(selections, bounds); + + return anomalyExplorerService.getAnomalyData$( + jobIds, + embeddableContainerWidth, + timeRange.earliestMs, + timeRange.latestMs, + influencersFilterQuery, + selectionInfluencers, + severityValue ?? 0, + maxSeriesToPlot + ); + } + ), + catchError((e) => { + // eslint-disable-next-line no-console + console.error(`Error occured fetching anomaly charts data for embeddable\n`, e); + setError(e.body); + return of(undefined); + }) + ) + .subscribe((results) => { + if (results !== undefined) { + setError(null); + setChartsData(results); + setIsLoading(false); + renderCallbacks.onRenderComplete(); + } + }); + + return () => { + subscription?.unsubscribe(); + chartWidth$.complete(); + severity$.complete(); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + useEffect(() => { + chartWidth$.next(chartWidth); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [chartWidth]); + + useEffect(() => { + severity$.next(severity); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [severity]); + + useEffect(() => { + if (error) { + renderCallbacks.onError(error); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [error]); + + return { chartsData, isLoading, error }; +} diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/use_anomaly_charts_input_resolver.test.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/use_anomaly_charts_input_resolver.test.ts deleted file mode 100644 index 2ddb7b75f3d6d..0000000000000 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/use_anomaly_charts_input_resolver.test.ts +++ /dev/null @@ -1,197 +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 { renderHook } from '@testing-library/react-hooks'; -import type { Observable } from 'rxjs'; -import { BehaviorSubject, of, Subject } from 'rxjs'; -import { fakeSchedulers } from 'rxjs-marbles/jest'; -import type { AnomalyChartsEmbeddableInput, AnomalyChartsServices } from '../types'; -import type { CoreStart } from '@kbn/core/public'; -import type { MlStartDependencies } from '../../plugin'; -import { useAnomalyChartsInputResolver } from './use_anomaly_charts_input_resolver'; -import type { EmbeddableAnomalyChartsContainerProps } from './embeddable_anomaly_charts_container'; -import moment from 'moment'; -import { createMlResultsServiceMock } from '../../application/services/ml_results_service'; -import { createCoreStartMock } from '../../__mocks__/core_start'; -import { createMlStartDepsMock } from '../../__mocks__/ml_start_deps'; -import { createAnomalyExplorerChartsServiceMock } from '../../application/services/__mocks__/anomaly_explorer_charts_service'; -import { createAnomalyDetectorServiceMock } from '../../application/services/__mocks__/anomaly_detector_service'; - -jest.mock('../common/process_filters', () => ({ - processFilters: jest.fn(), -})); - -jest.mock('../../application/explorer/explorer_utils', () => ({ - getSelectionInfluencers: jest.fn(() => { - return []; - }), - getSelectionJobIds: jest.fn(() => ['test-job']), - getSelectionTimeRange: jest.fn(() => ({ earliestMs: 1521309543000, latestMs: 1616003942999 })), -})); - -describe('useAnomalyChartsInputResolver', () => { - let embeddableInput: BehaviorSubject>; - let refresh: Subject; - let services: [CoreStart, MlStartDependencies, AnomalyChartsServices]; - let onInputChange: jest.Mock; - - const start = moment().subtract(1, 'years'); - const end = moment(); - - const renderCallbacks = { - onRenderComplete: jest.fn(), - onLoading: jest.fn(), - onError: jest.fn(), - }; - - beforeEach(() => { - jest.useFakeTimers({ legacyFakeTimers: true }); - - const jobIds = ['test-job']; - embeddableInput = new BehaviorSubject({ - id: 'test-explorer-charts-embeddable', - jobIds, - filters: [], - query: { language: 'kuery', query: '' }, - maxSeriesToPlot: 12, - timeRange: { - from: 'now-3y', - to: 'now', - }, - } as Partial); - - refresh = new Subject(); - const anomalyExplorerChartsServiceMock = createAnomalyExplorerChartsServiceMock(); - - anomalyExplorerChartsServiceMock.getTimeBounds.mockReturnValue({ - min: start, - max: end, - }); - - anomalyExplorerChartsServiceMock.getAnomalyData$.mockImplementation(() => - of({ - chartsPerRow: 2, - seriesToPlot: [], - tooManyBuckets: false, - timeFieldName: '@timestamp', - errorMessages: undefined, - }) - ); - - const coreStartMock = createCoreStartMock(); - const mlStartMock = createMlStartDepsMock(); - - const anomalyDetectorServiceMock = createAnomalyDetectorServiceMock(); - anomalyDetectorServiceMock.getJobs$.mockImplementation((jobId: string[]) => { - if (jobId.includes('invalid-job-id')) { - throw new Error('Invalid job'); - } - return of([ - { - job_id: 'cw_multi_1', - analysis_config: { bucket_span: '15m' }, - }, - ]); - }); - - services = [ - coreStartMock, - mlStartMock, - { - anomalyDetectorService: anomalyDetectorServiceMock, - anomalyExplorerService: anomalyExplorerChartsServiceMock, - mlResultsService: createMlResultsServiceMock(), - }, - ] as unknown as EmbeddableAnomalyChartsContainerProps['services']; - - onInputChange = jest.fn(); - }); - - afterEach(() => { - jest.useRealTimers(); - jest.clearAllMocks(); - }); - - test( - 'should fetch jobs only when input job ids have been changed', - fakeSchedulers(async (advance) => { - const { result } = renderHook(() => - useAnomalyChartsInputResolver( - embeddableInput as Observable, - onInputChange, - refresh, - services, - 1000, - 0, - renderCallbacks - ) - ); - - expect(result.current.chartsData).toBe(undefined); - expect(result.current.error).toBe(undefined); - expect(result.current.isLoading).toBe(true); - expect(renderCallbacks.onLoading).toHaveBeenCalledTimes(0); - - advance(501); - - expect(renderCallbacks.onLoading).toHaveBeenCalledTimes(1); - - const explorerServices = services[2]; - - expect(explorerServices.anomalyDetectorService.getJobs$).toHaveBeenCalledTimes(1); - expect(explorerServices.anomalyExplorerService.getAnomalyData$).toHaveBeenCalledTimes(1); - - expect(renderCallbacks.onRenderComplete).toHaveBeenCalledTimes(1); - - embeddableInput.next({ - id: 'test-explorer-charts-embeddable', - jobIds: ['anotherJobId'], - filters: [], - query: { language: 'kuery', query: '' }, - maxSeriesToPlot: 6, - timeRange: { - from: 'now-3y', - to: 'now', - }, - }); - advance(501); - - expect(renderCallbacks.onLoading).toHaveBeenCalledTimes(2); - - expect(explorerServices.anomalyDetectorService.getJobs$).toHaveBeenCalledTimes(2); - expect(explorerServices.anomalyExplorerService.getAnomalyData$).toHaveBeenCalledTimes(2); - - expect(renderCallbacks.onRenderComplete).toHaveBeenCalledTimes(2); - - expect(renderCallbacks.onError).toHaveBeenCalledTimes(0); - }) - ); - - test.skip('should not complete the observable on error', async () => { - const { result } = renderHook(() => - useAnomalyChartsInputResolver( - embeddableInput as Observable, - onInputChange, - refresh, - services, - 1000, - 1, - renderCallbacks - ) - ); - - embeddableInput.next({ - id: 'test-explorer-charts-embeddable', - jobIds: ['invalid-job-id'], - filters: [], - query: { language: 'kuery', query: '' }, - } as Partial); - - expect(result.current.error).toBeDefined(); - expect(renderCallbacks.onError).toHaveBeenCalledTimes(1); - }); -}); diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/use_anomaly_charts_input_resolver.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/use_anomaly_charts_input_resolver.ts deleted file mode 100644 index 7af34daec557d..0000000000000 --- a/x-pack/plugins/ml/public/embeddables/anomaly_charts/use_anomaly_charts_input_resolver.ts +++ /dev/null @@ -1,161 +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 { useEffect, useMemo, useState } from 'react'; -import type { Observable } from 'rxjs'; -import { combineLatest, of, Subject } from 'rxjs'; -import { catchError, debounceTime, skipWhile, startWith, switchMap, tap } from 'rxjs'; -import type { CoreStart } from '@kbn/core/public'; -import type { InfluencersFilterQuery } from '@kbn/ml-anomaly-utils'; -import type { MlStartDependencies } from '../../plugin'; -import type { AppStateSelectedCells } from '../../application/explorer/explorer_utils'; -import { - getSelectionInfluencers, - getSelectionJobIds, - getSelectionTimeRange, -} from '../../application/explorer/explorer_utils'; -import { OVERALL_LABEL, SWIMLANE_TYPE } from '../../application/explorer/explorer_constants'; -import type { - AnomalyChartsEmbeddableInput, - AnomalyChartsEmbeddableOutput, - AnomalyChartsServices, -} from '..'; -import type { ExplorerChartsData } from '../../application/explorer/explorer_charts/explorer_charts_container_service'; -import { processFilters } from '../common/process_filters'; -import { getJobsObservable } from '../common/get_jobs_observable'; - -const FETCH_RESULTS_DEBOUNCE_MS = 500; - -export function useAnomalyChartsInputResolver( - embeddableInput: Observable, - onInputChange: (output: Partial) => void, - refresh: Observable, - services: [CoreStart, MlStartDependencies, AnomalyChartsServices], - chartWidth: number, - severity: number, - renderCallbacks: { - onRenderComplete: () => void; - onLoading: () => void; - onError: (error: Error) => void; - } -): { - chartsData: ExplorerChartsData | undefined; - isLoading: boolean; - error: Error | null | undefined; -} { - const [, , { anomalyDetectorService, anomalyExplorerService }] = services; - - const [chartsData, setChartsData] = useState(); - const [error, setError] = useState(); - const [isLoading, setIsLoading] = useState(false); - - const chartWidth$ = useMemo(() => new Subject(), []); - const severity$ = useMemo(() => new Subject(), []); - - useEffect(() => { - const subscription = combineLatest([ - getJobsObservable(embeddableInput, anomalyDetectorService, setError), - embeddableInput, - chartWidth$.pipe(skipWhile((v) => !v)), - severity$, - refresh.pipe(startWith(null)), - ]) - .pipe( - tap(setIsLoading.bind(null, true)), - debounceTime(FETCH_RESULTS_DEBOUNCE_MS), - tap(() => { - renderCallbacks.onLoading(); - }), - switchMap(([explorerJobs, input, embeddableContainerWidth, severityValue]) => { - if (!explorerJobs) { - // couldn't load the list of jobs - return of(undefined); - } - - const { maxSeriesToPlot, timeRange: timeRangeInput, filters, query } = input; - - const viewBySwimlaneFieldName = OVERALL_LABEL; - - anomalyExplorerService.setTimeRange(timeRangeInput); - - let influencersFilterQuery: InfluencersFilterQuery | undefined; - try { - if (filters || query) { - influencersFilterQuery = processFilters(filters, query); - } - } catch (e) { - // handle query syntax errors - setError(e); - return of(undefined); - } - - const bounds = anomalyExplorerService.getTimeBounds(); - - // Can be from input time range or from the timefilter bar - const selections: AppStateSelectedCells = { - lanes: [OVERALL_LABEL], - times: [bounds.min?.unix()!, bounds.max?.unix()!], - type: SWIMLANE_TYPE.OVERALL, - }; - - const selectionInfluencers = getSelectionInfluencers(selections, viewBySwimlaneFieldName); - - const jobIds = getSelectionJobIds(selections, explorerJobs); - - const timeRange = getSelectionTimeRange(selections, bounds); - - return anomalyExplorerService.getAnomalyData$( - jobIds, - embeddableContainerWidth, - timeRange.earliestMs, - timeRange.latestMs, - influencersFilterQuery, - selectionInfluencers, - severityValue ?? 0, - maxSeriesToPlot - ); - }), - catchError((e) => { - setError(e.body); - return of(undefined); - }) - ) - .subscribe((results) => { - if (results !== undefined) { - setError(null); - setChartsData(results); - setIsLoading(false); - - renderCallbacks.onRenderComplete(); - } - }); - - return () => { - subscription.unsubscribe(); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - useEffect(() => { - chartWidth$.next(chartWidth); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [chartWidth]); - - useEffect(() => { - severity$.next(severity); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [severity]); - - useEffect(() => { - if (error) { - renderCallbacks.onError(error); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [error]); - - return { chartsData, isLoading, error }; -} diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_charts/utils.ts b/x-pack/plugins/ml/public/embeddables/anomaly_charts/utils.ts new file mode 100644 index 0000000000000..82355a2ef3d71 --- /dev/null +++ b/x-pack/plugins/ml/public/embeddables/anomaly_charts/utils.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 { i18n } from '@kbn/i18n'; +import type { JobId } from '../../../common/types/anomaly_detection_jobs'; + +export const getDefaultExplorerChartsPanelTitle = (jobIds: JobId[]) => + i18n.translate('xpack.ml.anomalyChartsEmbeddable.title', { + defaultMessage: 'ML anomaly charts for {jobIds}', + values: { jobIds: jobIds.join(', ') }, + }); diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx index 3c13a85cd6286..c67c2ed157cda 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/anomaly_swimlane_embeddable_factory.tsx @@ -199,7 +199,6 @@ export const getAnomalySwimLaneEmbeddableFactory = ( ...swimLaneComparators, } ); - const appliedTimeRange$: Observable = combineLatest([ api.timeRange$, apiHasParentApi(api) && apiPublishesTimeRange(api.parentApi) 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 64c0d9db7b7b7..52c84770da12c 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 @@ -33,6 +33,7 @@ import type { SwimlaneType } from '../../application/explorer/explorer_constants import { SWIMLANE_TYPE, VIEW_BY_JOB_LABEL } from '../../application/explorer/explorer_constants'; import type { AnomalySwimLaneEmbeddableState, AnomalySwimlaneEmbeddableUserInput } from '..'; import { getDefaultSwimlanePanelTitle } from './anomaly_swimlane_embeddable'; +import { getJobSelectionErrors } from '../utils'; export type ExplicitInput = AnomalySwimlaneEmbeddableUserInput; @@ -45,16 +46,6 @@ export interface AnomalySwimlaneInitializerProps { adJobsApiService: MlApiServices['jobs']; } -const getJobSelectionErrors = (jobIds: string[]) => { - if (jobIds.length === 0) { - return [ - i18n.translate('xpack.ml.swimlaneEmbeddable.setupModal.jobSelectionRequiredError', { - defaultMessage: 'Job selection is required', - }), - ]; - } -}; - export const AnomalySwimlaneInitializer: FC = ({ onCreate, onCancel, diff --git a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/initialize_swim_lane_data_fetcher.ts b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/initialize_swim_lane_data_fetcher.ts index 6946215b0c452..268a17fca4a81 100644 --- a/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/initialize_swim_lane_data_fetcher.ts +++ b/x-pack/plugins/ml/public/embeddables/anomaly_swimlane/initialize_swim_lane_data_fetcher.ts @@ -53,13 +53,9 @@ export const initializeSwimLaneDataFetcher = ( const swimLaneData$ = new BehaviorSubject(undefined); - const selectedJobs$ = getJobsObservable( - swimLaneApi.jobIds.pipe(map((jobIds) => ({ jobIds }))), - anomalyDetectorService, - (error) => { - blockingError.next(error); - } - ).pipe(shareReplay(1)); + const selectedJobs$ = getJobsObservable(swimLaneApi.jobIds, anomalyDetectorService, (error) => { + blockingError.next(error); + }).pipe(shareReplay(1)); const swimLaneInput$ = combineLatest({ jobIds: swimLaneApi.jobIds, diff --git a/x-pack/plugins/ml/public/embeddables/common/get_jobs_observable.ts b/x-pack/plugins/ml/public/embeddables/common/get_jobs_observable.ts index e770106200f7b..e1fc6a6d178c1 100644 --- a/x-pack/plugins/ml/public/embeddables/common/get_jobs_observable.ts +++ b/x-pack/plugins/ml/public/embeddables/common/get_jobs_observable.ts @@ -14,22 +14,21 @@ import type { ExplorerJob } from '../../application/explorer/explorer_utils'; import type { AnomalyDetectorService } from '../../application/services/anomaly_detector_service'; export function getJobsObservable( - embeddableInput: Observable<{ jobIds: JobId[] }>, + jobIds$: Observable, anomalyDetectorService: AnomalyDetectorService, setErrorHandler: (e: Error) => void -) { - return embeddableInput.pipe( - map((v) => v.jobIds), +): Observable { + return jobIds$.pipe( distinctUntilChanged(isEqual), - switchMap((jobsIds) => - anomalyDetectorService.getJobs$(jobsIds).pipe( + switchMap((jobsIds) => { + return anomalyDetectorService.getJobs$(jobsIds).pipe( catchError((e) => { // Catch error to prevent the observable from completing setErrorHandler(e.body ?? e); return EMPTY; }) - ) - ), + ); + }), map((jobs) => { const explorerJobs: ExplorerJob[] = jobs.map((job) => { const bucketSpan = parseInterval(job.analysis_config.bucket_span!); diff --git a/x-pack/plugins/ml/public/embeddables/common/process_filters.ts b/x-pack/plugins/ml/public/embeddables/common/process_filters.ts index d3725d59b7c66..e4b6079bfe0ea 100644 --- a/x-pack/plugins/ml/public/embeddables/common/process_filters.ts +++ b/x-pack/plugins/ml/public/embeddables/common/process_filters.ts @@ -10,6 +10,7 @@ import type { AggregateQuery, Filter, Query } from '@kbn/es-query'; import { isOfAggregateQueryType } from '@kbn/es-query'; import { fromKueryExpression, luceneStringToDsl, toElasticsearchQuery } from '@kbn/es-query'; import { getDefaultQuery } from '@kbn/data-plugin/public'; +import { isDefined } from '@kbn/ml-is-defined'; export function processFilters( optionalFilters?: Filter[], @@ -28,7 +29,7 @@ export function processFilters( : luceneStringToDsl(query.query); } - const must = [inputQuery]; + const must = isDefined(inputQuery) ? [inputQuery] : []; const mustNot = []; for (const filter of filters) { diff --git a/x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx b/x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx deleted file mode 100644 index 99b301ee19e9f..0000000000000 --- a/x-pack/plugins/ml/public/embeddables/common/resolve_job_selection.tsx +++ /dev/null @@ -1,107 +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 type { CoreStart } from '@kbn/core/public'; -import moment from 'moment'; -import { takeUntil, distinctUntilChanged, skip } from 'rxjs'; -import { from } from 'rxjs'; -import React from 'react'; -import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; -import { toMountPoint } from '@kbn/react-kibana-mount'; -import type { DataViewsContract } from '@kbn/data-views-plugin/public'; -import { getInitialGroupsMap } from '../../application/components/job_selector/job_selector'; -import type { JobId } from '../../../common/types/anomaly_detection_jobs'; -import { JobSelectorFlyout } from './components/job_selector_flyout'; -import { getMlGlobalServices } from '../../application/util/get_services'; - -/** - * Handles Anomaly detection jobs selection by a user. - * Intended to use independently of the ML app context, - * for instance on the dashboard for embeddables initialization. - * - * @param coreStart - * @param selectedJobIds - */ -export async function resolveJobSelection( - coreStart: CoreStart, - dataViews: DataViewsContract, - selectedJobIds?: JobId[], - singleSelection: boolean = false -): Promise<{ jobIds: string[]; groups: Array<{ groupId: string; jobIds: string[] }> }> { - const { - http, - uiSettings, - application: { currentAppId$ }, - ...startServices - } = coreStart; - - return new Promise(async (resolve, reject) => { - try { - const maps = { - groupsMap: getInitialGroupsMap([]), - jobsMap: {}, - }; - const tzConfig = uiSettings.get('dateFormat:tz'); - const dateFormatTz = tzConfig !== 'Browser' ? tzConfig : moment.tz.guess(); - - const onFlyoutClose = () => { - flyoutSession.close(); - reject(); - }; - - const onSelectionConfirmed = async ({ - jobIds, - groups, - }: { - jobIds: string[]; - groups: Array<{ - groupId: string; - jobIds: string[]; - }>; - }) => { - await flyoutSession.close(); - resolve({ - jobIds, - groups, - }); - }; - - const flyoutSession = coreStart.overlays.openFlyout( - toMountPoint( - - - , - startServices - ), - { - 'data-test-subj': 'mlFlyoutJobSelector', - ownFocus: true, - closeButtonProps: { 'aria-label': 'jobSelectorFlyout' }, - } - ); - - // Close the flyout when user navigates out of the current plugin - currentAppId$ - .pipe(skip(1), takeUntil(from(flyoutSession.onClose)), distinctUntilChanged()) - .subscribe(() => { - flyoutSession.close(); - }); - } catch (error) { - reject(error); - } - }); -} diff --git a/x-pack/plugins/ml/public/embeddables/get_embeddable_component.tsx b/x-pack/plugins/ml/public/embeddables/get_embeddable_component.tsx deleted file mode 100644 index 4fc41a65efd1c..0000000000000 --- a/x-pack/plugins/ml/public/embeddables/get_embeddable_component.tsx +++ /dev/null @@ -1,56 +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 { EuiLoadingChart } from '@elastic/eui'; -import type { CoreStart } from '@kbn/core/public'; -import type { EmbeddableFactory, EmbeddableInput } from '@kbn/embeddable-plugin/public'; -import { EmbeddableRoot, useEmbeddableFactory } from '@kbn/embeddable-plugin/public'; -import React from 'react'; -import type { MlStartDependencies } from '../plugin'; -import type { AnomalyExplorerChartsEmbeddableType } from './constants'; -import type { MappedEmbeddableTypeOf } from './types'; - -/** - * Gets an instance of an embeddable component of requested type. - * @param embeddableType - * @param core - * @param plugins - */ -export function getEmbeddableComponent( - embeddableType: EmbeddableType, - core: CoreStart, - plugins: MlStartDependencies -) { - const { embeddable: embeddableStart } = plugins; - - const factory = - embeddableStart.getEmbeddableFactory>(embeddableType); - - if (!factory) { - throw new Error(`Embeddable type "${embeddableType}" has not been registered.`); - } - - return React.memo((props: MappedEmbeddableTypeOf) => { - return ; - }); -} - -interface EmbeddableRootWrapperProps { - factory: EmbeddableFactory; - input: TMlEmbeddableInput; -} - -const EmbeddableRootWrapper = ({ - factory, - input, -}: EmbeddableRootWrapperProps) => { - const [embeddable, loading, error] = useEmbeddableFactory({ factory, input }); - if (loading) { - return ; - } - return ; -}; diff --git a/x-pack/plugins/ml/public/embeddables/index.ts b/x-pack/plugins/ml/public/embeddables/index.ts index 936c76bc02703..9145bbddf5818 100644 --- a/x-pack/plugins/ml/public/embeddables/index.ts +++ b/x-pack/plugins/ml/public/embeddables/index.ts @@ -7,12 +7,13 @@ import type { EmbeddableSetup } from '@kbn/embeddable-plugin/public'; import type { MlCoreSetup } from '../plugin'; -import { AnomalyChartsEmbeddableFactory } from './anomaly_charts'; -import { ANOMALY_SINGLE_METRIC_VIEWER_EMBEDDABLE_TYPE } from './constants'; -import { ANOMALY_SWIMLANE_EMBEDDABLE_TYPE } from './constants'; +import { + ANOMALY_SINGLE_METRIC_VIEWER_EMBEDDABLE_TYPE, + ANOMALY_SWIMLANE_EMBEDDABLE_TYPE, + ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE, +} from './constants'; export * from './constants'; -export { getEmbeddableComponent } from './get_embeddable_component'; export * from './types'; export function registerEmbeddables(embeddable: EmbeddableSetup, core: MlCoreSetup) { @@ -21,8 +22,12 @@ export function registerEmbeddables(embeddable: EmbeddableSetup, core: MlCoreSet return getAnomalySwimLaneEmbeddableFactory(core.getStartServices); }); - const anomalyChartsFactory = new AnomalyChartsEmbeddableFactory(core.getStartServices); - embeddable.registerEmbeddableFactory(anomalyChartsFactory.type, anomalyChartsFactory); + embeddable.registerReactEmbeddableFactory(ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE, async () => { + const { getAnomalyChartsReactEmbeddableFactory } = await import( + './anomaly_charts/anomaly_charts_embeddable_factory' + ); + return getAnomalyChartsReactEmbeddableFactory(core.getStartServices); + }); embeddable.registerReactEmbeddableFactory( ANOMALY_SINGLE_METRIC_VIEWER_EMBEDDABLE_TYPE, diff --git a/x-pack/plugins/ml/public/embeddables/types.ts b/x-pack/plugins/ml/public/embeddables/types.ts index 34e0b1afb3265..94389c69c20fc 100644 --- a/x-pack/plugins/ml/public/embeddables/types.ts +++ b/x-pack/plugins/ml/public/embeddables/types.ts @@ -7,13 +7,7 @@ import type { CoreStart } from '@kbn/core/public'; import type { RefreshInterval } from '@kbn/data-plugin/common'; -import type { DataView } from '@kbn/data-views-plugin/common'; -import type { - DefaultEmbeddableApi, - EmbeddableInput, - EmbeddableOutput, - IEmbeddable, -} from '@kbn/embeddable-plugin/public'; +import type { DefaultEmbeddableApi, EmbeddableInput } from '@kbn/embeddable-plugin/public'; import type { Filter, Query, TimeRange } from '@kbn/es-query'; import type { MlEntityField } from '@kbn/ml-anomaly-utils'; import type { @@ -25,8 +19,10 @@ import type { PublishingSubject, PublishesTimeRange, PublishesWritablePanelTitle, + PublishesDataViews, SerializedTitles, } from '@kbn/presentation-publishing'; +import { type BehaviorSubject } from 'rxjs'; import type { JobId } from '../../common/types/anomaly_detection_jobs'; import type { MlDependencies } from '../application/app'; import type { MlCapabilitiesService } from '../application/capabilities/check_capabilities'; @@ -108,21 +104,74 @@ export interface SwimLaneDrilldownContext extends EditSwimlanePanelContext { } /** - * Anomaly Explorer + * Anomaly Explorer Charts */ -export interface AnomalyChartsEmbeddableCustomInput { + +export interface AnomalyChartsEmbeddableRuntimeState { jobIds: JobId[]; maxSeriesToPlot: number; - // Embeddable inputs which are not included in the default interface - filters: Filter[]; - query: Query; - refreshConfig: RefreshInterval; - timeRange: TimeRange; severityThreshold?: number; + selectedEntities?: MlEntityField[]; +} +export interface AnomalyChartsEmbeddableOverridableState + extends AnomalyChartsEmbeddableRuntimeState { + timeRange?: TimeRange; +} +export interface AnomalyChartsComponentApi { + jobIds$: PublishingSubject; + maxSeriesToPlot$: PublishingSubject; + severityThreshold$: PublishingSubject; + selectedEntities$: PublishingSubject; + updateUserInput: (input: AnomalyChartsEmbeddableOverridableState) => void; + updateSeverityThreshold: (v?: number) => void; + updateSelectedEntities: (entities?: MlEntityField[] | undefined) => void; +} +export interface AnomalyChartsDataLoadingApi { + onRenderComplete: () => void; + onLoading: (v: boolean) => void; + onError: (error?: Error) => void; } -export type AnomalyChartsEmbeddableInput = EmbeddableInput & AnomalyChartsEmbeddableCustomInput; +/** + * Persisted state for the Anomaly Charts Embeddable. + */ +export interface AnomalyChartsEmbeddableState + extends SerializedTitles, + AnomalyChartsEmbeddableOverridableState {} + +export type AnomalyChartsApi = AnomalyChartsComponentApi & AnomalyChartsDataLoadingApi; + +export type AnomalyChartsEmbeddableApi = MlEmbeddableBaseApi & + PublishesDataViews & + PublishesWritablePanelTitle & + HasEditCapabilities & + AnomalyChartsApi; + +export interface AnomalyChartsFieldSelectionApi { + jobIds: PublishingSubject; + entityFields: PublishingSubject; +} + +export interface AnomalyChartsAttachmentState extends AnomalyChartsEmbeddableState { + query?: Query; + filters?: Filter[]; +} + +export interface AnomalyChartsAttachmentApi extends AnomalyChartsApi { + parentApi: { + query$: BehaviorSubject; + filters$: BehaviorSubject; + timeRange$: BehaviorSubject; + }; +} + +/** + * Persisted state for the Anomaly Charts Embeddable. + */ +export interface AnomalyChartsEmbeddableState + extends SerializedTitles, + AnomalyChartsEmbeddableOverridableState {} /** Manual input by the user */ export interface SingleMetricViewerEmbeddableUserInput { @@ -205,14 +254,8 @@ export type SingleMetricViewerEmbeddableServices = [ MlDependencies, SingleMetricViewerServices ]; -export interface AnomalyChartsCustomOutput { - entityFields?: MlEntityField[]; - severity?: number; - indexPatterns: DataView[]; -} -export type AnomalyChartsEmbeddableOutput = EmbeddableOutput & AnomalyChartsCustomOutput; export interface EditAnomalyChartsPanelContext { - embeddable: IEmbeddable; + embeddable: AnomalyChartsEmbeddableApi; } export interface AnomalyChartsFieldSelectionContext extends EditAnomalyChartsPanelContext { @@ -224,5 +267,5 @@ export interface AnomalyChartsFieldSelectionContext extends EditAnomalyChartsPan export type MappedEmbeddableTypeOf = TEmbeddableType extends AnomalyExplorerChartsEmbeddableType - ? AnomalyChartsEmbeddableInput + ? AnomalyChartsEmbeddableState : unknown; diff --git a/x-pack/plugins/ml/public/embeddables/utils.ts b/x-pack/plugins/ml/public/embeddables/utils.ts new file mode 100644 index 0000000000000..807a0d8a7b8d2 --- /dev/null +++ b/x-pack/plugins/ml/public/embeddables/utils.ts @@ -0,0 +1,17 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; + +export const getJobSelectionErrors = (jobIds: string[]) => { + if (jobIds.length === 0) { + return [ + i18n.translate('xpack.ml.swimlaneEmbeddable.setupModal.jobSelectionRequiredError', { + defaultMessage: 'Job selection is required', + }), + ]; + } +}; diff --git a/x-pack/plugins/ml/public/ui_actions/create_anomaly_chart.tsx b/x-pack/plugins/ml/public/ui_actions/create_anomaly_chart.tsx new file mode 100644 index 0000000000000..c4b88bdd43306 --- /dev/null +++ b/x-pack/plugins/ml/public/ui_actions/create_anomaly_chart.tsx @@ -0,0 +1,82 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import type { PresentationContainer } from '@kbn/presentation-containers'; +import type { EmbeddableApiContext } from '@kbn/presentation-publishing'; +import type { UiActionsActionDefinition } from '@kbn/ui-actions-plugin/public'; +import { IncompatibleActionError } from '@kbn/ui-actions-plugin/public'; +import { ML_APP_NAME, PLUGIN_ICON, PLUGIN_ID } from '../../common/constants/app'; +import type { AnomalyChartsEmbeddableApi } from '../embeddables'; +import { ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE } from '../embeddables'; +import type { MlCoreSetup } from '../plugin'; + +export const EDIT_ANOMALY_CHARTS_PANEL_ACTION = 'editAnomalyChartsPanelAction'; + +export type CreateAnomalyChartsPanelActionContext = EmbeddableApiContext & { + embeddable: AnomalyChartsEmbeddableApi; +}; + +const parentApiIsCompatible = async ( + parentApi: unknown +): Promise => { + const { apiIsPresentationContainer } = await import('@kbn/presentation-containers'); + // we cannot have an async type check, so return the casted parentApi rather than a boolean + return apiIsPresentationContainer(parentApi) ? (parentApi as PresentationContainer) : undefined; +}; + +export function createAddAnomalyChartsPanelAction( + getStartServices: MlCoreSetup['getStartServices'] +): UiActionsActionDefinition { + return { + id: 'create-anomaly-charts', + grouping: [ + { + id: PLUGIN_ID, + getDisplayName: () => ML_APP_NAME, + getIconType: () => PLUGIN_ICON, + }, + ], + getDisplayName: () => + i18n.translate('xpack.ml.components.mlAnomalyExplorerEmbeddable.displayName', { + defaultMessage: 'Anomaly chart', + }), + getDisplayNameTooltip: () => + i18n.translate('xpack.ml.components.mlAnomalyExplorerEmbeddable.description', { + defaultMessage: 'View anomaly detection results in a chart.', + }), + async isCompatible(context: EmbeddableApiContext) { + return Boolean(await parentApiIsCompatible(context.embeddable)); + }, + async execute(context) { + const presentationContainerParent = await parentApiIsCompatible(context.embeddable); + if (!presentationContainerParent) throw new IncompatibleActionError(); + + const [coreStart, pluginStart] = await getStartServices(); + try { + const { resolveEmbeddableAnomalyChartsUserInput } = await import( + '../embeddables/anomaly_charts/anomaly_charts_setup_flyout' + ); + const initialState = await resolveEmbeddableAnomalyChartsUserInput( + coreStart, + pluginStart, + context.embeddable, + context.embeddable.uuid + ); + + presentationContainerParent.addNewPanel({ + panelType: ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE, + initialState, + }); + } catch (e) { + // eslint-disable-next-line no-console + console.error(e); + return Promise.reject(); + } + }, + }; +} diff --git a/x-pack/plugins/ml/public/ui_actions/edit_anomaly_charts_panel_action.tsx b/x-pack/plugins/ml/public/ui_actions/edit_anomaly_charts_panel_action.tsx deleted file mode 100644 index 68d629e3f3ceb..0000000000000 --- a/x-pack/plugins/ml/public/ui_actions/edit_anomaly_charts_panel_action.tsx +++ /dev/null @@ -1,59 +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 { i18n } from '@kbn/i18n'; -import type { UiActionsActionDefinition } from '@kbn/ui-actions-plugin/public'; -import { ViewMode } from '@kbn/embeddable-plugin/public'; -import type { MlCoreSetup } from '../plugin'; -import type { EditAnomalyChartsPanelContext } from '../embeddables'; -import { ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE } from '../embeddables'; - -export const EDIT_ANOMALY_CHARTS_PANEL_ACTION = 'editAnomalyChartsPanelAction'; - -export function createEditAnomalyChartsPanelAction( - getStartServices: MlCoreSetup['getStartServices'] -): UiActionsActionDefinition { - return { - id: 'edit-anomaly-charts', - type: EDIT_ANOMALY_CHARTS_PANEL_ACTION, - getIconType(context): string { - return 'pencil'; - }, - getDisplayName: () => - i18n.translate('xpack.ml.actions.editAnomalyChartsTitle', { - defaultMessage: 'Edit anomaly charts', - }), - async execute({ embeddable }) { - if (!embeddable) { - throw new Error('Not possible to execute an action without the embeddable context'); - } - - const [coreStart, deps] = await getStartServices(); - - try { - const { resolveEmbeddableAnomalyChartsUserInput } = await import( - '../embeddables/anomaly_charts/anomaly_charts_setup_flyout' - ); - - const result = await resolveEmbeddableAnomalyChartsUserInput( - coreStart, - deps.data.dataViews, - embeddable.getInput() - ); - embeddable.updateInput(result); - } catch (e) { - return Promise.reject(); - } - }, - async isCompatible({ embeddable }) { - return ( - embeddable.type === ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE && - embeddable.getInput().viewMode === ViewMode.EDIT - ); - }, - }; -} diff --git a/x-pack/plugins/ml/public/ui_actions/index.ts b/x-pack/plugins/ml/public/ui_actions/index.ts index 08fda084b413a..66dd1f0f06f34 100644 --- a/x-pack/plugins/ml/public/ui_actions/index.ts +++ b/x-pack/plugins/ml/public/ui_actions/index.ts @@ -15,7 +15,6 @@ import { createApplyInfluencerFiltersAction } from './apply_influencer_filters_a import { createApplyTimeRangeSelectionAction } from './apply_time_range_action'; import { createClearSelectionAction } from './clear_selection_action'; import { createAddSwimlanePanelAction } from './create_swim_lane'; -import { createEditAnomalyChartsPanelAction } from './edit_anomaly_charts_panel_action'; import { createAddSingleMetricViewerPanelAction } from './create_single_metric_viewer'; import { createCategorizationADJobAction, @@ -30,6 +29,7 @@ import { SWIM_LANE_SELECTION_TRIGGER, swimLaneSelectionTrigger, } from './triggers'; +import { createAddAnomalyChartsPanelAction } from './create_anomaly_chart'; export { APPLY_INFLUENCER_FILTERS_ACTION } from './apply_influencer_filters_action'; export { APPLY_TIME_RANGE_SELECTION_ACTION } from './apply_time_range_action'; export { OPEN_IN_ANOMALY_EXPLORER_ACTION } from './open_in_anomaly_explorer_action'; @@ -55,19 +55,22 @@ export function registerMlUiActions( const applyEntityFieldFilterAction = createApplyEntityFieldFiltersAction(core.getStartServices); const applyTimeRangeSelectionAction = createApplyTimeRangeSelectionAction(core.getStartServices); const clearSelectionAction = createClearSelectionAction(core.getStartServices); - const editExplorerPanelAction = createEditAnomalyChartsPanelAction(core.getStartServices); const visToAdJobAction = createVisToADJobAction(core.getStartServices); const categorizationADJobAction = createCategorizationADJobAction(core.getStartServices); + const addAnomalyChartsPanelAction = createAddAnomalyChartsPanelAction(core.getStartServices); + // Register actions uiActions.registerAction(applyEntityFieldFilterAction); uiActions.registerAction(applyTimeRangeSelectionAction); uiActions.registerAction(categorizationADJobAction); + uiActions.registerAction(addAnomalyChartsPanelAction); // Assign triggers uiActions.addTriggerAction('ADD_PANEL_TRIGGER', addSingleMetricViewerPanelAction); uiActions.addTriggerAction('ADD_PANEL_TRIGGER', addSwimlanePanelAction); - uiActions.addTriggerAction(CONTEXT_MENU_TRIGGER, editExplorerPanelAction); + uiActions.addTriggerAction('ADD_PANEL_TRIGGER', addAnomalyChartsPanelAction); + uiActions.addTriggerAction(CONTEXT_MENU_TRIGGER, openInExplorerAction); uiActions.attachAction(CONTEXT_MENU_TRIGGER, openInSingleMetricViewerAction.id); diff --git a/x-pack/plugins/ml/public/ui_actions/open_in_anomaly_explorer_action.tsx b/x-pack/plugins/ml/public/ui_actions/open_in_anomaly_explorer_action.tsx index 426f6f32ee242..98a44c042db58 100644 --- a/x-pack/plugins/ml/public/ui_actions/open_in_anomaly_explorer_action.tsx +++ b/x-pack/plugins/ml/public/ui_actions/open_in_anomaly_explorer_action.tsx @@ -16,8 +16,8 @@ import type { SerializableRecord } from '@kbn/utility-types'; import { ML_APP_LOCATOR } from '../../common/constants/locator'; import type { ExplorerAppState } from '../../common/types/locator'; import type { AppStateSelectedCells } from '../application/explorer/explorer_utils'; +import type { AnomalyChartsApi, AnomalyChartsEmbeddableApi } from '../embeddables'; import { ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE } from '../embeddables'; -import type { AnomalyChartsEmbeddableApi } from '../embeddables/anomaly_charts/types'; import type { AnomalySwimLaneEmbeddableApi } from '../embeddables/anomaly_swimlane/types'; import { isSwimLaneEmbeddableContext } from '../embeddables/anomaly_swimlane/types'; import type { MlCoreSetup } from '../plugin'; @@ -41,9 +41,9 @@ export interface OpenInAnomalyExplorerAnomalyChartsActionContext extends Embedda export const OPEN_IN_ANOMALY_EXPLORER_ACTION = 'openInAnomalyExplorerAction'; -export function isAnomalyChartsEmbeddableContext( - arg: unknown -): arg is OpenInAnomalyExplorerAnomalyChartsActionContext { +export function isAnomalyChartsEmbeddableContext(arg: unknown): arg is { + embeddable: AnomalyChartsApi; +} { return ( isPopulatedObject(arg, ['embeddable']) && apiIsOfType(arg.embeddable, ANOMALY_EXPLORER_CHARTS_EMBEDDABLE_TYPE) @@ -97,10 +97,12 @@ export function createOpenInExplorerAction( }); } else if (isAnomalyChartsEmbeddableContext(context)) { const { embeddable } = context; - const { jobIds, entityFields } = embeddable; + const { jobIds$, selectedEntities$ } = embeddable; + const jobIds = jobIds$?.getValue() ?? []; let mlExplorerFilter: ExplorerAppState['mlExplorerFilter'] | undefined; - const entityFieldsValue = entityFields.getValue(); + const entityFieldsValue = selectedEntities$?.getValue(); + if ( Array.isArray(entityFieldsValue) && entityFieldsValue.length === 1 && @@ -132,7 +134,7 @@ export function createOpenInExplorerAction( return locator.getUrl({ page: 'explorer', pageState: { - jobIds: jobIds.getValue(), + jobIds, timeRange: getEmbeddableTimeRange(embeddable), // @ts-ignore QueryDslQueryContainer is not compatible with SerializableRecord ...(mlExplorerFilter ? ({ mlExplorerFilter } as SerializableRecord) : {}), diff --git a/x-pack/plugins/ml/server/models/results_service/results_service.ts b/x-pack/plugins/ml/server/models/results_service/results_service.ts index aa0b075002367..0a732cf45a94c 100644 --- a/x-pack/plugins/ml/server/models/results_service/results_service.ts +++ b/x-pack/plugins/ml/server/models/results_service/results_service.ts @@ -157,7 +157,7 @@ export function resultsServiceProvider(mlClient: MlClient, client?: IScopedClust }); } - if (influencersFilterQuery !== undefined) { + if (influencersFilterQuery) { boolCriteria.push(influencersFilterQuery); } diff --git a/x-pack/plugins/ml/server/routes/saved_objects.ts b/x-pack/plugins/ml/server/routes/saved_objects.ts index e1e07bf6201f9..a184a85eacd32 100644 --- a/x-pack/plugins/ml/server/routes/saved_objects.ts +++ b/x-pack/plugins/ml/server/routes/saved_objects.ts @@ -78,6 +78,7 @@ export function savedObjectsRoutes( .get({ path: `${ML_EXTERNAL_BASE_PATH}/saved_objects/sync`, access: 'public', + description: 'Synchronize machine learning saved objects', options: { tags: [ 'access:ml:canCreateJob', diff --git a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/errors/error_details.cy.ts b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/errors/error_details.cy.ts index d470202d9f041..e61762629a537 100644 --- a/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/errors/error_details.cy.ts +++ b/x-pack/plugins/observability_solution/apm/ftr_e2e/cypress/e2e/errors/error_details.cy.ts @@ -6,6 +6,8 @@ */ import { getErrorGroupingKey } from '@kbn/apm-synthtrace-client/src/lib/apm/instance'; +import { generateLongId } from '@kbn/apm-synthtrace-client/src/lib/utils/generate_id'; + import url from 'url'; import { synthtrace } from '../../../synthtrace'; import { checkA11y } from '../../support/commands'; @@ -69,7 +71,7 @@ describe('Error details', () => { }); describe('when error has data', () => { - const errorGroupingKey = getErrorGroupingKey('Error 1'); + const errorGroupingKey = generateLongId('Error 1'); const errorGroupingKeyShort = errorGroupingKey.slice(0, 5); const errorDetailsPageHref = url.format({ pathname: `/app/apm/services/opbeans-java/errors/${errorGroupingKey}`, diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/view_in_apm_button.test.tsx b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/view_in_apm_button.test.tsx new file mode 100644 index 0000000000000..703f4324238ba --- /dev/null +++ b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/view_in_apm_button.test.tsx @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { render } from '@testing-library/react'; +import { ViewInAPMButton } from './view_in_apm_button'; +import * as apmContext from '../../../../context/apm_plugin/use_apm_plugin_context'; + +describe('ViewInApmButton', () => { + const config = { + serviceName: 'testService', + environment: 'testEnvironment', + transactionName: 'testTransaction', + transactionType: 'testTransactionType', + from: 'now-15m', + to: 'now', + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('hides button when share plugin is not available', () => { + const { queryByText } = render(); + + expect(queryByText('View in APM')).not.toBeInTheDocument(); + }); + + it('reners correctly', () => { + jest.spyOn(apmContext, 'useApmPluginContext').mockReturnValue({ + share: { + url: { + locators: { + // @ts-ignore + get: () => ({ + navigate: jest.fn(), + }), + }, + }, + }, + }); + const { getByText } = render(); + + expect(getByText('View in APM')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/view_in_apm_button.tsx b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/view_in_apm_button.tsx index ac67359d64568..f8935a4082ded 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/view_in_apm_button.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/view_in_apm_button.tsx @@ -4,7 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -/* Error Rate */ import React from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -29,8 +28,8 @@ export function ViewInAPMButton({ to: string; kuery?: string; }) { - const { share } = useApmPluginContext(); - const serviceNavigator = share.url.locators.get(APM_APP_LOCATOR_ID); + const { share } = useApmPluginContext() || {}; + const serviceNavigator = share?.url?.locators?.get(APM_APP_LOCATOR_ID); if (!serviceNavigator) { return null; diff --git a/x-pack/plugins/observability_solution/apm/server/routes/storage_explorer/indices_stats_helpers.ts b/x-pack/plugins/observability_solution/apm/server/routes/storage_explorer/indices_stats_helpers.ts index 3943f349e55e6..85e3dbfb97ca1 100644 --- a/x-pack/plugins/observability_solution/apm/server/routes/storage_explorer/indices_stats_helpers.ts +++ b/x-pack/plugins/observability_solution/apm/server/routes/storage_explorer/indices_stats_helpers.ts @@ -74,7 +74,7 @@ export async function getIndicesLifecycleStatus({ filter_path: 'indices.*.phase', }); - return indices; + return indices || {}; } export async function getIndicesInfo({ diff --git a/x-pack/plugins/observability_solution/infra/common/constants.ts b/x-pack/plugins/observability_solution/infra/common/constants.ts index e4621f63793c2..d0f48068dda64 100644 --- a/x-pack/plugins/observability_solution/infra/common/constants.ts +++ b/x-pack/plugins/observability_solution/infra/common/constants.ts @@ -37,3 +37,8 @@ export const O11Y_AAD_FIELDS = [ export const LINK_TO_INVENTORY = '/app/metrics/link-to/inventory'; export const METRICS_EXPLORER_URL = '/app/metrics/explorer'; export const fifteenMinutesInMilliseconds = 15 * 60 * 1000; + +export const DEFAULT_METRICS_VIEW_ATTRIBUTES = { + name: 'Metrics View', + timeFieldName: TIMESTAMP_FIELD, +}; diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/expression.test.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/expression.test.tsx index c39fbc8e0f0c0..8eae693451e63 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/expression.test.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/expression.test.tsx @@ -8,18 +8,47 @@ import { mountWithIntl, nextTick, shallowWithIntl } from '@kbn/test-jest-helpers'; import React from 'react'; import { act } from 'react-dom/test-utils'; +import { DataView, type FieldSpec } from '@kbn/data-views-plugin/common'; // We are using this inside a `jest.mock` call. Jest requires dynamic dependencies to be prefixed with `mock` import { coreMock as mockCoreMock } from '@kbn/core/public/mocks'; import { Comparator, InventoryMetricConditions } from '../../../../common/alerting/metrics'; -import { SnapshotCustomMetricInput } from '../../../../common/http_api/snapshot_api'; import { AlertContextMeta, defaultExpression, ExpressionRow, Expressions } from './expression'; import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks'; - -jest.mock('../../../containers/metrics_source/source', () => ({ +import { ResolvedDataView } from '../../../utils/data_view'; +import { TIMESTAMP_FIELD } from '../../../../common/constants'; +import type { SnapshotCustomMetricInput } from '../../../../common/http_api'; + +const mockDataView = { + id: 'mock-id', + title: 'mock-title', + timeFieldName: TIMESTAMP_FIELD, + fields: [ + { + name: 'some.system.field', + type: 'bzzz', + searchable: true, + aggregatable: true, + }, + ] as Partial, + isPersisted: () => false, + getName: () => 'mock-data-view', + toSpec: () => ({}), +} as jest.Mocked; + +jest.mock('../../../containers/metrics_source', () => ({ withSourceProvider: () => jest.fn, useSourceContext: () => ({ source: { id: 'default' }, - createDerivedIndexPattern: () => ({ fields: [], title: 'metricbeat-*' }), + }), + useMetricsDataViewContext: () => ({ + metricsView: { + indices: 'metricbeat-*', + timeFieldName: mockDataView.timeFieldName, + fields: mockDataView.fields, + dataViewReference: mockDataView, + } as ResolvedDataView, + loading: false, + error: undefined, }), })); @@ -28,7 +57,6 @@ jest.mock('../../../hooks/use_kibana', () => ({ services: mockCoreMock.createStart(), }), })); - const exampleCustomMetric = { id: 'this-is-an-id', field: 'some.system.field', @@ -174,15 +202,6 @@ describe('ExpressionRow', () => { metric: [], }} expression={expression} - fields={[ - { - name: 'some.system.field', - type: 'bzzz', - searchable: true, - aggregatable: true, - displayable: true, - }, - ]} /> ); diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/expression.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/expression.tsx index 56bc91f3613f5..ce88a2112e528 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/expression.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/expression.tsx @@ -64,7 +64,7 @@ import { } from '../../../../common/http_api/snapshot_api'; import { toMetricOpt } from '../../../../common/snapshot_metric_i18n'; import { - DerivedIndexPattern, + useMetricsDataViewContext, useSourceContext, withSourceProvider, } from '../../../containers/metrics_source'; @@ -120,15 +120,12 @@ export const defaultExpression = { export const Expressions: React.FC = (props) => { const { setRuleParams, ruleParams, errors, metadata } = props; - const { source, createDerivedIndexPattern } = useSourceContext(); + const { source } = useSourceContext(); const [timeSize, setTimeSize] = useState(1); const [timeUnit, setTimeUnit] = useState('m'); - const derivedIndexPattern = useMemo( - () => createDerivedIndexPattern(), - [createDerivedIndexPattern] - ); + const { metricsView } = useMetricsDataViewContext(); const updateParams = useCallback( (id, e: InventoryMetricConditions) => { @@ -166,13 +163,13 @@ export const Expressions: React.FC = (props) => { try { setRuleParams( 'filterQuery', - convertKueryToElasticSearchQuery(filter, derivedIndexPattern, false) || '' + convertKueryToElasticSearchQuery(filter, metricsView?.dataViewReference, false) || '' ); } catch (e) { setRuleParams('filterQuery', QUERY_INVALID); } }, - [derivedIndexPattern, setRuleParams] + [metricsView?.dataViewReference, setRuleParams] ); /* eslint-disable-next-line react-hooks/exhaustive-deps */ @@ -247,10 +244,10 @@ export const Expressions: React.FC = (props) => { setRuleParams('filterQueryText', md.filter); setRuleParams( 'filterQuery', - convertKueryToElasticSearchQuery(md.filter, derivedIndexPattern) || '' + convertKueryToElasticSearchQuery(md.filter, metricsView?.dataViewReference) || '' ); } - }, [metadata, derivedIndexPattern, setRuleParams]); + }, [metadata, metricsView?.dataViewReference, setRuleParams]); useEffect(() => { const md = metadata; @@ -276,7 +273,7 @@ export const Expressions: React.FC = (props) => { if (!ruleParams.sourceId) { setRuleParams('sourceId', source?.id || 'default'); } - }, [metadata, derivedIndexPattern, defaultExpression, source]); // eslint-disable-line react-hooks/exhaustive-deps + }, [metadata, metricsView?.dataViewReference, defaultExpression, source]); // eslint-disable-line react-hooks/exhaustive-deps return ( <> @@ -314,7 +311,6 @@ export const Expressions: React.FC = (props) => { setRuleParams={updateParams} errors={(errors[idx] as IErrorObject) || emptyError} expression={e || {}} - fields={derivedIndexPattern.fields} > = (props) => { > {metadata ? ( ): void; - fields: DerivedIndexPattern['fields']; } const NonCollapsibleExpressionCss = css` @@ -450,8 +444,7 @@ const StyledHealthCss = css` export const ExpressionRow: FC> = (props) => { const [isExpanded, toggle] = useToggle(true); - const { children, setRuleParams, expression, errors, expressionId, remove, canDelete, fields } = - props; + const { children, setRuleParams, expression, errors, expressionId, remove, canDelete } = props; const { metric, comparator = Comparator.GT, @@ -619,7 +612,6 @@ export const ExpressionRow: FC> = (props) onChangeCustom={updateCustomMetric} errors={errors} customMetric={customMetric} - fields={fields} /> {!displayWarningThreshold && criticalThresholdExpression} diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/metric.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/metric.tsx index d6704ce6c2b89..dfe22251fb599 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/metric.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/inventory/components/metric.tsx @@ -24,6 +24,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { debounce } from 'lodash'; import React, { useCallback, useMemo, useState } from 'react'; import { IErrorObject } from '@kbn/triggers-actions-ui-plugin/public'; +import { useMetricsDataViewContext } from '../../../containers/metrics_source'; import { getCustomMetricLabel } from '../../../../common/formatters/get_custom_metric_label'; import { SnapshotCustomAggregation, @@ -32,7 +33,6 @@ import { SnapshotCustomMetricInputRT, SNAPSHOT_CUSTOM_AGGREGATIONS, } from '../../../../common/http_api/snapshot_api'; -import { DerivedIndexPattern } from '../../../containers/metrics_source'; interface Props { metric?: { value: string; text: string }; @@ -41,7 +41,6 @@ interface Props { onChange: (metric?: string) => void; onChangeCustom: (customMetric?: SnapshotCustomMetricInput) => void; customMetric?: SnapshotCustomMetricInput; - fields: DerivedIndexPattern['fields']; popupPosition?: | 'upCenter' | 'upLeft' @@ -80,7 +79,6 @@ export const MetricExpression = ({ metric, metrics, customMetric, - fields, errors, onChange, onChangeCustom, @@ -90,6 +88,7 @@ export const MetricExpression = ({ const [customMetricTabOpen, setCustomMetricTabOpen] = useState(metric?.value === 'custom'); const [selectedOption, setSelectedOption] = useState(metric?.value); const [fieldDisplayedCustomLabel, setFieldDisplayedCustomLabel] = useState(customMetric?.label); + const { metricsView } = useMetricsDataViewContext(); // eslint-disable-next-line react-hooks/exhaustive-deps const firstFieldOption = { @@ -101,10 +100,10 @@ export const MetricExpression = ({ const fieldOptions = useMemo( () => - fields + (metricsView?.fields ?? []) .filter((f) => f.aggregatable && f.type === 'number' && !(customMetric?.field === f.name)) .map((f) => ({ label: f.name })), - [fields, customMetric?.field] + [metricsView?.fields, customMetric?.field] ); const expressionDisplayValue = useMemo(() => { diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/__snapshots__/alert_details_app_section.test.tsx.snap b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/__snapshots__/alert_details_app_section.test.tsx.snap index 0d63415081910..72381f6e62d63 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/__snapshots__/alert_details_app_section.test.tsx.snap +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/__snapshots__/alert_details_app_section.test.tsx.snap @@ -17,10 +17,6 @@ Array [ />, ], "chartType": "line", - "derivedIndexPattern": Object { - "fields": Array [], - "title": "metricbeat-*", - }, "expression": Object { "aggType": "count", "comparator": ">", @@ -38,9 +34,6 @@ Array [ "host-1", ], "hideTitle": true, - "source": Object { - "id": "default", - }, "timeRange": Object { "from": "2023-03-28T10:43:13.802Z", "to": "2023-03-29T13:14:09.581Z", diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/alert_details_app_section.test.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/alert_details_app_section.test.tsx index a9d5b2c2193fc..f7827fcbcadbb 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/alert_details_app_section.test.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/alert_details_app_section.test.tsx @@ -48,14 +48,6 @@ jest.mock('../../../hooks/use_kibana', () => ({ }), })); -jest.mock('../../../containers/metrics_source/source', () => ({ - withSourceProvider: () => jest.fn, - useSourceContext: () => ({ - source: { id: 'default' }, - createDerivedIndexPattern: () => ({ fields: [], title: 'metricbeat-*' }), - }), -})); - describe('AlertDetailsAppSection', () => { const queryClient = new QueryClient(); const mockedSetAlertSummaryFields = jest.fn(); diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/alert_details_app_section.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/alert_details_app_section.tsx index 27c61aa8c18ca..feed66500a2a1 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/alert_details_app_section.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/alert_details_app_section.tsx @@ -7,7 +7,7 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import React, { useEffect, useMemo } from 'react'; +import React, { useEffect } from 'react'; import moment from 'moment'; import { EuiFlexGroup, @@ -33,7 +33,7 @@ import { getPaddedAlertTimeRange } from '@kbn/observability-get-padded-alert-tim import { metricValueFormatter } from '../../../../common/alerting/metrics/metric_value_formatter'; import { TIME_LABELS } from '../../common/criterion_preview_chart/criterion_preview_chart'; import { Threshold } from '../../common/components/threshold'; -import { useSourceContext, withSourceProvider } from '../../../containers/metrics_source'; +import { withSourceProvider } from '../../../containers/metrics_source'; import { generateUniqueKey } from '../lib/generate_unique_key'; import { MetricsExplorerChartType } from '../../../pages/metrics/metrics_explorer/hooks/use_metrics_explorer_options'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; @@ -80,16 +80,11 @@ export function AlertDetailsAppSection({ setAlertSummaryFields, }: AppSectionProps) { const { uiSettings, charts } = useKibanaContextForPlugin().services; - const { source, createDerivedIndexPattern } = useSourceContext(); const { euiTheme } = useEuiTheme(); const groupInstance = alert.fields[ALERT_GROUP]?.map((group: Group) => group.value); const groups = alert.fields[ALERT_GROUP]; const tags = alert.fields[TAGS]; - const derivedIndexPattern = useMemo( - () => createDerivedIndexPattern(), - [createDerivedIndexPattern] - ); const chartProps = { baseTheme: charts.theme.useChartsBaseTheme(), }; @@ -188,13 +183,11 @@ export function AlertDetailsAppSection({ diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/custom_equation/custom_equation_editor.stories.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/custom_equation/custom_equation_editor.stories.tsx index d2fd0639859a6..ce30172a74f15 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/custom_equation/custom_equation_editor.stories.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/custom_equation/custom_equation_editor.stories.tsx @@ -34,24 +34,6 @@ export default { }, } as Meta; -const fakeDataView = { - title: 'metricbeat-*', - fields: [ - { - name: 'system.cpu.user.pct', - type: 'number', - }, - { - name: 'system.cpu.system.pct', - type: 'number', - }, - { - name: 'system.cpu.cores', - type: 'number', - }, - ], -}; - const CustomEquationEditorTemplate: Story = (args) => { const [expression, setExpression] = useState(args.expression); const [errors, setErrors] = useState(args.errors); @@ -78,7 +60,6 @@ const CustomEquationEditorTemplate: Story = (args) => errors={errors} expression={expression} onChange={handleExpressionChange} - dataView={fakeDataView} /> ); }; diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/custom_equation/custom_equation_editor.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/custom_equation/custom_equation_editor.tsx index 3b00563fcc0f4..c87ec88fa3ef9 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/custom_equation/custom_equation_editor.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/custom_equation/custom_equation_editor.tsx @@ -13,6 +13,7 @@ import { EuiSpacer, } from '@elastic/eui'; import React, { useState, useCallback, useMemo } from 'react'; +import { i18n } from '@kbn/i18n'; import { omit, range, first, xor, debounce } from 'lodash'; import { IErrorObject } from '@kbn/triggers-actions-ui-plugin/public'; import { FormattedMessage } from '@kbn/i18n-react'; @@ -40,7 +41,7 @@ export interface CustomEquationEditorProps { fields: NormalizedFields; aggregationTypes: AggregationTypes; errors: IErrorObject; - dataView: DataViewBase; + dataView?: DataViewBase; } const NEW_METRIC = { name: 'A', aggType: Aggregators.AVERAGE as CustomMetricAggTypes }; @@ -55,7 +56,6 @@ export const CustomEquationEditor = ({ fields, aggregationTypes, errors, - dataView, }: CustomEquationEditorProps) => { const [customMetrics, setCustomMetrics] = useState( expression?.customMetrics ?? [NEW_METRIC] @@ -133,7 +133,6 @@ export const CustomEquationEditor = ({ disableDelete={disableDelete} onChange={handleChange} errors={errors} - dataView={dataView} /> ); } @@ -183,7 +182,9 @@ export const CustomEquationEditor = ({ { const aggOptions = useMemo( () => @@ -95,7 +92,6 @@ export const MetricRowWithCount = ({ ({ +const mockDataView = { + id: 'mock-id', + title: 'mock-title', + timeFieldName: TIMESTAMP_FIELD, + isPersisted: () => false, + getName: () => 'mock-data-view', + toSpec: () => ({}), +} as jest.Mocked; + +jest.mock('../../../containers/metrics_source', () => ({ withSourceProvider: () => jest.fn, useSourceContext: () => ({ source: { id: 'default' }, - createDerivedIndexPattern: () => ({ fields: [], title: 'metricbeat-*' }), + }), + useMetricsDataViewContext: () => ({ + metricsView: { + indices: 'metricbeat-*', + timeFieldName: mockDataView.timeFieldName, + fields: mockDataView.fields, + dataViewReference: mockDataView, + } as ResolvedDataView, + loading: false, + error: undefined, }), })); @@ -29,8 +49,6 @@ jest.mock('../../../hooks/use_kibana', () => ({ }), })); -const dataViewMock = dataViewPluginMocks.createStartContract(); - describe('Expression', () => { async function setup(currentOptions: { metrics?: MetricsExplorerMetric[]; @@ -55,7 +73,6 @@ describe('Expression', () => { metadata={{ currentOptions, }} - dataViews={dataViewMock} /> ); diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression.tsx index 814a968d9718e..542dd74eb1732 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression.tsx @@ -28,7 +28,11 @@ import { RuleTypeParamsExpressionProps, } from '@kbn/triggers-actions-ui-plugin/public'; import { TimeUnitChar } from '@kbn/observability-plugin/common/utils/formatters/duration'; -import { useSourceContext, withSourceProvider } from '../../../containers/metrics_source'; +import { + useMetricsDataViewContext, + useSourceContext, + withSourceProvider, +} from '../../../containers/metrics_source'; import { Aggregators, Comparator, QUERY_INVALID } from '../../../../common/alerting/metrics'; import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; import { MetricsExplorerGroupBy } from '../../../pages/metrics/metrics_explorer/components/group_by'; @@ -42,7 +46,13 @@ const FILTER_TYPING_DEBOUNCE_MS = 500; type Props = Omit< RuleTypeParamsExpressionProps, - 'defaultActionGroupId' | 'actionGroups' | 'charts' | 'data' | 'unifiedSearch' | 'onChangeMetaData' + | 'defaultActionGroupId' + | 'actionGroups' + | 'charts' + | 'data' + | 'unifiedSearch' + | 'onChangeMetaData' + | 'dataViews' >; const defaultExpression = { @@ -57,14 +67,11 @@ export { defaultExpression }; export const Expressions: React.FC = (props) => { const { setRuleParams, ruleParams, errors, metadata } = props; const { docLinks } = useKibanaContextForPlugin().services; - const { source, createDerivedIndexPattern } = useSourceContext(); + const { source } = useSourceContext(); + const { metricsView } = useMetricsDataViewContext(); const [timeSize, setTimeSize] = useState(1); const [timeUnit, setTimeUnit] = useState('m'); - const derivedIndexPattern = useMemo( - () => createDerivedIndexPattern(), - [createDerivedIndexPattern] - ); const options = useMemo(() => { if (metadata?.currentOptions?.metrics) { @@ -113,13 +120,13 @@ export const Expressions: React.FC = (props) => { try { setRuleParams( 'filterQuery', - convertKueryToElasticSearchQuery(filter, derivedIndexPattern, false) || '' + convertKueryToElasticSearchQuery(filter, metricsView?.dataViewReference, false) || '' ); } catch (e) { setRuleParams('filterQuery', QUERY_INVALID); } }, - [setRuleParams, derivedIndexPattern] + [setRuleParams, metricsView?.dataViewReference] ); /* eslint-disable-next-line react-hooks/exhaustive-deps */ @@ -193,7 +200,10 @@ export const Expressions: React.FC = (props) => { setRuleParams('filterQueryText', md.currentOptions.filterQuery); setRuleParams( 'filterQuery', - convertKueryToElasticSearchQuery(md.currentOptions.filterQuery, derivedIndexPattern) || '' + convertKueryToElasticSearchQuery( + md.currentOptions.filterQuery, + metricsView?.dataViewReference + ) || '' ); } else if (md && md.currentOptions?.groupBy && md.series) { const { groupBy } = md.currentOptions; @@ -203,10 +213,10 @@ export const Expressions: React.FC = (props) => { setRuleParams('filterQueryText', filter); setRuleParams( 'filterQuery', - convertKueryToElasticSearchQuery(filter, derivedIndexPattern) || '' + convertKueryToElasticSearchQuery(filter, metricsView?.dataViewReference) || '' ); } - }, [metadata, derivedIndexPattern, setRuleParams]); + }, [metadata, metricsView?.dataViewReference, setRuleParams]); const preFillAlertGroupBy = useCallback(() => { const md = metadata; @@ -299,7 +309,6 @@ export const Expressions: React.FC = (props) => { return ( 1) || false} - fields={derivedIndexPattern.fields} remove={removeExpression} addExpression={addExpression} key={idx} // idx's don't usually make good key's but here the index has semantic meaning @@ -307,12 +316,9 @@ export const Expressions: React.FC = (props) => { setRuleParams={updateParams} errors={(errors[idx] as IErrorObject) || emptyError} expression={e || {}} - dataView={derivedIndexPattern} > @@ -395,7 +401,6 @@ export const Expressions: React.FC = (props) => { > {(metadata && ( = (props) => { > false, + getName: () => 'mock-data-view', + toSpec: () => ({}), +} as jest.Mocked; const mockStartServices = mockCoreMock.createStart(); jest.mock('../../../hooks/use_kibana', () => ({ @@ -32,6 +42,23 @@ jest.mock('../../../hooks/use_kibana', () => ({ }), })); +jest.mock('../../../containers/metrics_source', () => ({ + withSourceProvider: () => jest.fn, + useSourceContext: () => ({ + source: { id: 'default' }, + }), + useMetricsDataViewContext: () => ({ + metricsView: { + indices: 'metricbeat-*', + timeFieldName: mockDataView.timeFieldName, + fields: mockDataView.fields, + dataViewReference: mockDataView, + } as ResolvedDataView, + loading: false, + error: undefined, + }), +})); + const mockResponse = { pageInfo: { afterKey: null, @@ -51,29 +78,9 @@ describe('ExpressionChart', () => { groupBy?: string, annotations?: Array> ) { - const derivedIndexPattern: DataViewBase = { - title: 'metricbeat-*', - fields: [], - }; - - const source: MetricsSourceConfiguration = { - id: 'default', - origin: 'fallback', - configuration: { - name: 'default', - description: 'The default configuration', - metricAlias: 'metricbeat-*', - inventoryDefaultView: 'host', - metricsExplorerDefaultView: 'host', - anomalyThreshold: 20, - }, - }; - const wrapper = mountWithIntl( >; chartType?: MetricsExplorerChartType; filterQuery?: string; groupBy?: string | string[]; groupInstance?: string | string[]; hideTitle?: boolean; - source?: MetricsSourceConfiguration; timeRange?: TimeRange; } export const ExpressionChart: React.FC = ({ expression, - derivedIndexPattern, annotations, chartType = MetricsExplorerChartType.bar, filterQuery, groupBy, groupInstance, hideTitle = false, - source, timeRange, }) => { const { charts } = useKibanaContextForPlugin().services; const chartTheme = useTimelineChartTheme(); - const { isLoading, data } = useMetricsExplorerChartData( + const { isLoading, data } = useMetricsExplorerChartData({ expression, - derivedIndexPattern, - source, filterQuery, groupBy, groupInstance, - timeRange - ); + timeRange, + }); const chartRef = useRef(null); const handleCursorUpdate = useActiveCursor(charts.activeCursor, chartRef, { diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression_row.test.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression_row.test.tsx index 4180b033a746a..964848b17a67f 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression_row.test.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression_row.test.tsx @@ -5,18 +5,53 @@ * 2.0. */ +import { ResolvedDataView } from '../../../utils/data_view'; import { mountWithIntl, nextTick } from '@kbn/test-jest-helpers'; import React from 'react'; import { act } from 'react-dom/test-utils'; import { Comparator } from '../../../../common/alerting/metrics'; import { MetricExpression } from '../types'; import { ExpressionRow } from './expression_row'; +import { TIMESTAMP_FIELD } from '../../../../common/constants'; +import { DataView, type FieldSpec } from '@kbn/data-views-plugin/common'; -jest.mock('../../../containers/metrics_source/source', () => ({ +const mockDataView = { + id: 'mock-id', + title: 'mock-title', + timeFieldName: TIMESTAMP_FIELD, + fields: [ + { + name: 'system.cpu.user.pct', + type: 'test', + searchable: true, + aggregatable: true, + }, + { + name: 'system.load.1', + type: 'test', + searchable: true, + aggregatable: true, + }, + ] as Partial, + isPersisted: () => false, + getName: () => 'mock-data-view', + toSpec: () => ({}), +} as jest.Mocked; + +jest.mock('../../../containers/metrics_source', () => ({ withSourceProvider: () => jest.fn, useSourceContext: () => ({ source: { id: 'default' }, - createDerivedIndexPattern: () => ({ fields: [], title: 'metricbeat-*' }), + }), + useMetricsDataViewContext: () => ({ + metricsView: { + indices: 'metricbeat-*', + timeFieldName: mockDataView.timeFieldName, + fields: mockDataView.fields, + dataViewReference: mockDataView, + } as ResolvedDataView, + loading: false, + error: undefined, }), })); @@ -25,22 +60,6 @@ describe('ExpressionRow', () => { const wrapper = mountWithIntl( {}} addExpression={() => {}} key={1} @@ -52,7 +71,6 @@ describe('ExpressionRow', () => { timeWindowSize: [], }} expression={expression} - dataView={{ fields: [], title: 'metricbeat-*' }} /> ); diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression_row.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression_row.tsx index 7804a9f15ab26..a3a5c2021307d 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression_row.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression_row.tsx @@ -17,7 +17,7 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { omit } from 'lodash'; -import React, { useCallback, useMemo, useState, FC, PropsWithChildren } from 'react'; +import React, { PropsWithChildren, useCallback, useMemo, useState } from 'react'; import { euiStyled } from '@kbn/kibana-react-plugin/common'; import { AggregationType, @@ -27,11 +27,10 @@ import { ThresholdExpression, WhenExpression, } from '@kbn/triggers-actions-ui-plugin/public'; -import { DataViewBase } from '@kbn/es-query'; import useToggle from 'react-use/lib/useToggle'; +import { useMetricsDataViewContext } from '../../../containers/metrics_source'; import { Aggregators, Comparator } from '../../../../common/alerting/metrics'; import { decimalToPct, pctToDecimal } from '../../../../common/utils/corrected_percent_convert'; -import { DerivedIndexPattern } from '../../../containers/metrics_source'; import { AGGREGATION_TYPES, MetricExpression } from '../types'; import { CustomEquationEditor } from './custom_equation'; import { CUSTOM_EQUATION } from '../i18n_strings'; @@ -48,7 +47,6 @@ const customComparators = { }; interface ExpressionRowProps { - fields: DerivedIndexPattern['fields']; expressionId: number; expression: MetricExpression; errors: IErrorObject; @@ -56,7 +54,6 @@ interface ExpressionRowProps { addExpression(): void; remove(id: number): void; setRuleParams(id: number, params: MetricExpression): void; - dataView: DataViewBase; } const NegativeHorizontalMarginDiv = euiStyled.div`margin: 0 -4px;`; @@ -69,20 +66,17 @@ const StyledHealth = euiStyled(EuiHealth)` margin-left: 4px; `; -export const ExpressionRow: FC> = (props) => { +export const ExpressionRow = ({ + children, + setRuleParams, + expression, + errors, + expressionId, + remove, + canDelete, +}: PropsWithChildren) => { const [isExpanded, toggle] = useToggle(true); - - const { - dataView, - children, - setRuleParams, - expression, - errors, - expressionId, - remove, - fields, - canDelete, - } = props; + const { metricsView } = useMetricsDataViewContext(); const { aggType = AGGREGATION_TYPES.MAX, @@ -209,7 +203,7 @@ export const ExpressionRow: FC> = (props) /> ); - const normalizedFields = fields.map((f) => ({ + const normalizedFields = (metricsView?.fields ?? []).map((f) => ({ normalizedType: f.type, name: f.name, })); @@ -341,7 +335,6 @@ export const ExpressionRow: FC> = (props) aggregationTypes={aggregationType} onChange={handleCustomMetricChange} errors={errors} - dataView={dataView} /> diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/hooks/use_metrics_explorer_chart_data.ts b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/hooks/use_metrics_explorer_chart_data.ts index 79e2e4aec33da..73bafecee1000 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/hooks/use_metrics_explorer_chart_data.ts +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/hooks/use_metrics_explorer_chart_data.ts @@ -6,10 +6,8 @@ */ import DateMath from '@kbn/datemath'; -import { DataViewBase } from '@kbn/es-query'; import { useMemo } from 'react'; import { MetricExpressionCustomMetric } from '../../../../common/alerting/metrics'; -import { MetricsSourceConfiguration } from '../../../../common/metrics_sources'; import { MetricExpression, TimeRange } from '../types'; import { MetricsExplorerOptions, @@ -20,15 +18,19 @@ import { MetricExplorerCustomMetricAggregations } from '../../../../common/http_ const DEFAULT_TIME_RANGE = {}; -export const useMetricsExplorerChartData = ( - expression: MetricExpression, - derivedIndexPattern: DataViewBase, - source?: MetricsSourceConfiguration, - filterQuery?: string, - groupBy?: string | string[], - groupInstance?: string | string[], - timeRange: TimeRange = DEFAULT_TIME_RANGE -) => { +export const useMetricsExplorerChartData = ({ + expression, + filterQuery, + groupBy, + groupInstance, + timeRange = DEFAULT_TIME_RANGE, +}: { + expression: MetricExpression; + filterQuery?: string; + groupBy?: string | string[]; + groupInstance?: string | string[]; + timeRange?: TimeRange; +}) => { const { timeSize, timeUnit } = expression || { timeSize: 1, timeUnit: 'm' }; const options: MetricsExplorerOptions = useMemo( @@ -74,7 +76,7 @@ export const useMetricsExplorerChartData = ( }; }, [timeRange, timeSize, timeUnit]); - return useMetricsExplorerData(options, source?.configuration, derivedIndexPattern, timestamps); + return useMetricsExplorerData({ options, timestamps }); }; const mapMetricThresholdMetricToMetricsExplorerMetric = (metric: MetricExpressionCustomMetric) => { diff --git a/x-pack/plugins/observability_solution/infra/public/apps/metrics_app.tsx b/x-pack/plugins/observability_solution/infra/public/apps/metrics_app.tsx index 519befb57f8c0..ab6ffcb6b5299 100644 --- a/x-pack/plugins/observability_solution/infra/public/apps/metrics_app.tsx +++ b/x-pack/plugins/observability_solution/infra/public/apps/metrics_app.tsx @@ -18,7 +18,7 @@ import { InfrastructurePage } from '../pages/metrics'; import { InfraClientStartDeps, InfraClientStartExports } from '../types'; import { CommonInfraProviders, CoreProviders } from './common_providers'; import { prepareMountElement } from './common_styles'; -import { SourceProvider } from '../containers/metrics_source'; +import { SourceProvider, MetricsDataViewProvider } from '../containers/metrics_source'; import { PluginConfigProvider } from '../containers/plugin_config_context'; import type { KibanaEnvContext } from '../hooks/use_kibana'; @@ -97,18 +97,20 @@ const MetricsApp: React.FC<{ triggersActionsUI={plugins.triggersActionsUi} > - - - - - - {uiCapabilities?.infrastructure?.show && ( - - )} - - - - + + + + + + + {uiCapabilities?.infrastructure?.show && ( + + )} + + + + + diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/context/fixtures/asset_details_props.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/context/fixtures/asset_details_props.ts index 7e76b3fa1474b..ab3318c7cebc7 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/context/fixtures/asset_details_props.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/context/fixtures/asset_details_props.ts @@ -66,5 +66,4 @@ export const assetDetailsProps: AssetDetailsProps = { }, tabs, links, - metricAlias: 'metrics-*', }; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/decorator.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/decorator.tsx index 7a7f93a7c57f5..1c09b8dabc58a 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/decorator.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/__stories__/decorator.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { JSXElementConstructor, ReactElement } from 'react'; +import React from 'react'; import { I18nProvider } from '@kbn/i18n-react'; import { KibanaContextProvider, @@ -19,15 +19,14 @@ import type { DeepPartial } from 'utility-types'; import type { LocatorPublic } from '@kbn/share-plugin/public'; import type { IKibanaSearchRequest, ISearchOptions } from '@kbn/search-types'; import type { SearchSessionState } from '@kbn/data-plugin/public'; -import { AlertSummaryWidget } from '@kbn/triggers-actions-ui-plugin/public/application/sections/alert_summary_widget/alert_summary_widget'; import type { Theme } from '@elastic/charts/dist/utils/themes/theme'; -import type { AlertSummaryWidgetProps } from '@kbn/triggers-actions-ui-plugin/public/application/sections/alert_summary_widget'; import { defaultLogViewAttributes } from '@kbn/logs-shared-plugin/common'; import { DataView, DataViewField } from '@kbn/data-views-plugin/common'; import { MemoryRouter } from 'react-router-dom'; +import { AlertPrefillProvider } from '../../../alerting/use_alert_prefill'; import { PluginConfigProvider } from '../../../containers/plugin_config_context'; import type { PluginKibanaContextValue } from '../../../hooks/use_kibana'; -import { SourceProvider } from '../../../containers/metrics_source'; +import { MetricsDataViewProvider, SourceProvider } from '../../../containers/metrics_source'; import { getHttp } from './context/http'; import { assetDetailsProps, getLogEntries } from './context/fixtures'; import { ContextProviders } from '../context_providers'; @@ -36,6 +35,7 @@ import type { InfraConfig } from '../../../../server'; const settings: Record = { 'dateFormat:scaled': [['', 'HH:mm:ss.SSS']], + 'timepicker:timeDefaults': ['now-15m', 'now'], }; const getSettings = (key: string): any => settings[key]; @@ -57,6 +57,16 @@ export const DecorateWithKibanaContext: DecoratorFn = (story) => { }, getUrlForApp: (url: string) => url, }, + chrome: { + docTitle: { + change(newTitle) { + action('chrome.docTitle.change')(newTitle); + return newTitle; + }, + }, + setBreadcrumbs: () => {}, + setBreadcrumbsAppendExtension: () => {}, + }, data: { search: { search: (request: IKibanaSearchRequest, options?: ISearchOptions) => { @@ -93,9 +103,8 @@ export const DecorateWithKibanaContext: DecoratorFn = (story) => { get: () => ({ key: 'mock', defaultOverride: undefined } as any), }, triggersActionsUi: { - getAlertSummaryWidget: AlertSummaryWidget as ( - props: AlertSummaryWidgetProps - ) => ReactElement>, + getAlertSummaryWidget: () => <>, + getAlertsStateTable: () => <>, }, charts: { theme: { @@ -125,6 +134,9 @@ export const DecorateWithKibanaContext: DecoratorFn = (story) => { navigate: async () => { return Promise.resolve(); }, + getRedirectUrl: (args: any) => { + action('share.url.locators.getRedirectUrl')(args); + }, } as unknown as LocatorPublic), }, }, @@ -154,6 +166,9 @@ export const DecorateWithKibanaContext: DecoratorFn = (story) => { reportAssetDetailsPageViewed: () => {}, reportAssetDashboardLoaded: () => {}, }, + observabilityShared: { + navigation: { PageTemplate: ({ children }: { children?: any }) => <>{children} }, + }, }; const config: InfraConfig = { @@ -195,7 +210,11 @@ export const DecorateWithKibanaContext: DecoratorFn = (story) => { - {story()} + + + {story()} + + @@ -212,7 +231,7 @@ export const DecorateWithAssetDetailsStateContext: DecoratorFn = (story) => { to: '2023-04-09T11:23:49Z', }} > - {story()} + {story()} ); }; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/asset_details.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/asset_details.tsx index 4c7613e843c39..49a6e1a17ac6c 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/asset_details.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/asset_details.tsx @@ -25,17 +25,11 @@ const ContentTemplate = ({ ); }; -export const AssetDetails = ({ - tabs, - links, - renderMode, - metricAlias, - ...props -}: AssetDetailsProps) => { +export const AssetDetails = ({ tabs, links, renderMode, ...props }: AssetDetailsProps) => { return ( - + diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/chart.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/chart.tsx index f1ccf0ef31b2b..e356eb009a1c4 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/chart.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/chart.tsx @@ -4,11 +4,12 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useCallback, useMemo } from 'react'; - +import React, { useCallback } from 'react'; import type { LensConfig, LensDataviewDataset } from '@kbn/lens-embeddable-utils/config_builder'; import type { TimeRange } from '@kbn/es-query'; -import { useDataView } from '../../../hooks/use_data_view'; +import useAsync from 'react-use/lib/useAsync'; +import { resolveDataView } from '../../../utils/data_view'; +import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; import { METRIC_CHART_HEIGHT } from '../../../common/visualizations/constants'; import { buildCombinedAssetFilter } from '../../../utils/filters/build'; import { type BrushEndArgs, LensChart, type OnFilterEvent, LensChartProps } from '../../lens'; @@ -27,17 +28,24 @@ export type ChartProps = LensConfig & export const Chart = ({ id, queryField, overrides, dateRange, assetId, ...props }: ChartProps) => { const { setDateRange } = useDatePickerContext(); const { searchSessionId } = useLoadingStateContext(); - const { dataView } = useDataView({ index: (props.dataset as LensDataviewDataset)?.index }); + const { + services: { dataViews }, + } = useKibanaContextForPlugin(); + + const { value: filters = [] } = useAsync(async () => { + const resolvedDataView = await resolveDataView({ + dataViewId: (props.dataset as LensDataviewDataset)?.index, + dataViewsService: dataViews, + }); - const filters = useMemo(() => { return [ buildCombinedAssetFilter({ field: queryField, values: [assetId], - dataView, + dataView: resolvedDataView.dataViewReference, }), ]; - }, [assetId, dataView, queryField]); + }, [assetId, dataViews, props.dataset, queryField]); const handleBrushEnd = useCallback( ({ range, preventDefault }: BrushEndArgs) => { diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/context_providers.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/context_providers.tsx index d1294f1b513e6..6cef28056d9a6 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/context_providers.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/context_providers.tsx @@ -15,7 +15,7 @@ import { AssetDetailsProps } from './types'; export const ContextProviders = ({ children, ...props -}: Omit & { +}: Omit & { children: React.ReactNode; }) => { const { diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_data_views.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_data_views.ts index 8207343f2bc4d..6ef5ab61f517d 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_data_views.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_data_views.ts @@ -9,15 +9,14 @@ import useAsync from 'react-use/lib/useAsync'; import createContainer from 'constate'; import { i18n } from '@kbn/i18n'; import { findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; +import { useMetricsDataViewContext } from '../../../containers/metrics_source'; import { useLogViewReference } from '../../../hooks/use_log_view_reference'; -import { useDataView } from '../../../hooks/use_data_view'; import { useAssetDetailsRenderPropsContext } from './use_asset_details_render_props'; -const useDataViews = ({ metricAlias }: { metricAlias: string }) => { +const useDataViews = () => { const { asset } = useAssetDetailsRenderPropsContext(); - const { dataView: metricsDataView, loading: metricsDataViewLoading } = useDataView({ - index: metricAlias, - }); + const { metricsView, loading: metricsDataViewLoading } = useMetricsDataViewContext(); + const { logViewReference, getLogsDataView, @@ -39,7 +38,7 @@ const useDataViews = ({ metricAlias }: { metricAlias: string }) => { ); return { - metrics: { dataView: metricsDataView, loading: metricsDataViewLoading }, + metrics: { dataView: metricsView?.dataViewReference, loading: metricsDataViewLoading }, logs: { dataView: logsDataView, reference: logViewReference, diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_process_list.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_process_list.ts index 5ec0d38739ba4..6ddff690c3818 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_process_list.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_process_list.ts @@ -14,7 +14,7 @@ import { BehaviorSubject } from 'rxjs'; import { ProcessListAPIResponse, ProcessListAPIResponseRT } from '../../../../common/http_api'; import { throwErrors, createPlainError } from '../../../../common/runtime_types'; import { useHTTPRequest } from '../../../hooks/use_http_request'; -import { useSourceContext } from '../../../containers/metrics_source'; +import { useMetricsDataViewContext } from '../../../containers/metrics_source'; export interface SortBy { name: string; @@ -28,8 +28,7 @@ export function useProcessList( searchFilter: object, request$?: BehaviorSubject<(() => Promise) | undefined> ) { - const { createDerivedIndexPattern } = useSourceContext(); - const indexPattern = createDerivedIndexPattern().title; + const { metricsView } = useMetricsDataViewContext(); const decodeResponse = (response: any) => { return pipe( @@ -51,7 +50,7 @@ export function useProcessList( 'POST', JSON.stringify({ hostTerm, - indexPattern, + indexPattern: metricsView?.indices, to, sortBy: parsedSortBy, searchFilter, @@ -80,9 +79,8 @@ export function useProcessList( function useProcessListParams(props: { hostTerm: Record; to: number }) { const { hostTerm, to } = props; - const { createDerivedIndexPattern } = useSourceContext(); - const indexPattern = createDerivedIndexPattern().title; - return { hostTerm, indexPattern, to }; + const { metricsView } = useMetricsDataViewContext(); + return { hostTerm, indexPattern: metricsView?.indices, to }; } const ProcessListContext = createContainter(useProcessListParams); export const [ProcessListContextProvider, useProcessListContext] = ProcessListContext; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/types.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/types.ts index 35eea0faab44b..afbf4fd35756a 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/types.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/types.ts @@ -80,9 +80,6 @@ export interface AssetDetailsProps { overrides?: OverridableTabState; renderMode: RenderMode; links?: LinkOptions[]; - // This is temporary. Once we start using the asset details in other plugins, - // It will have to retrieve the metricAlias internally rather than receive it via props - metricAlias: string; } export type TabsStateChangeFn = (state: TabState) => void; diff --git a/x-pack/plugins/observability_solution/infra/public/components/ml/anomaly_detection/anomaly_detection_flyout.tsx b/x-pack/plugins/observability_solution/infra/public/components/ml/anomaly_detection/anomaly_detection_flyout.tsx index dac65711e592f..bdace63850f36 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/ml/anomaly_detection/anomaly_detection_flyout.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/ml/anomaly_detection/anomaly_detection_flyout.tsx @@ -8,7 +8,7 @@ import React, { useState, useCallback } from 'react'; import { EuiHeaderLink, EuiFlyout } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import { useSourceContext } from '../../../containers/metrics_source'; +import { useMetricsDataViewContext } from '../../../containers/metrics_source'; import { FlyoutHome } from './flyout_home'; import { JobSetupScreen } from './job_setup_screen'; import { useInfraMLCapabilities } from '../../../containers/ml/infra_ml_capabilities'; @@ -17,8 +17,8 @@ import { MetricK8sModuleProvider } from '../../../containers/ml/modules/metrics_ import { useActiveKibanaSpace } from '../../../hooks/use_kibana_space'; export const AnomalyDetectionFlyout = ({ - hideJobType, - hideSelectGroup, + hideJobType = false, + hideSelectGroup = false, }: { hideJobType?: boolean; hideSelectGroup?: boolean; @@ -27,7 +27,7 @@ export const AnomalyDetectionFlyout = ({ const [showFlyout, setShowFlyout] = useState(false); const [screenName, setScreenName] = useState<'home' | 'setup'>('home'); const [screenParams, setScreenParams] = useState(null); - const { source } = useSourceContext(); + const { metricsView } = useMetricsDataViewContext(); const { space } = useActiveKibanaSpace(); @@ -48,7 +48,7 @@ export const AnomalyDetectionFlyout = ({ setShowFlyout(false); }, []); - if (source?.configuration.metricAlias == null || space == null) { + if (!metricsView?.indices || !space) { return null; } @@ -68,12 +68,12 @@ export const AnomalyDetectionFlyout = ({ {showFlyout && ( diff --git a/x-pack/plugins/observability_solution/infra/public/components/ml/anomaly_detection/job_setup_screen.tsx b/x-pack/plugins/observability_solution/infra/public/components/ml/anomaly_detection/job_setup_screen.tsx index c17b73703fe97..52150d0f9066a 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/ml/anomaly_detection/job_setup_screen.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/ml/anomaly_detection/job_setup_screen.tsx @@ -31,7 +31,7 @@ import moment, { Moment } from 'moment'; import { i18n } from '@kbn/i18n'; import { FeatureFeedbackButton, useUiTracker } from '@kbn/observability-shared-plugin/public'; import { css } from '@emotion/react'; -import { useSourceContext } from '../../../containers/metrics_source'; +import { useMetricsDataViewContext } from '../../../containers/metrics_source'; import { useMetricHostsModuleContext } from '../../../containers/ml/modules/metrics_hosts/module'; import { useMetricK8sModuleContext } from '../../../containers/ml/modules/metrics_k8s/module'; import { FixedDatePicker } from '../../fixed_datepicker'; @@ -54,10 +54,10 @@ export const JobSetupScreen = (props: Props) => { const [partitionField, setPartitionField] = useState(null); const host = useMetricHostsModuleContext(); const kubernetes = useMetricK8sModuleContext(); + const { metricsView } = useMetricsDataViewContext(); const [filter, setFilter] = useState(''); const [filterQuery, setFilterQuery] = useState(''); const trackMetric = useUiTracker({ app: 'infra_metrics' }); - const { createDerivedIndexPattern } = useSourceContext(); const { kibanaVersion, isCloudEnv, isServerlessEnv } = useContext(KibanaEnvironmentContext); const { euiTheme } = useEuiTheme(); @@ -95,11 +95,6 @@ export const JobSetupScreen = (props: Props) => { } }, [props.jobType, kubernetes.jobSummaries, host.jobSummaries]); - const derivedIndexPattern = useMemo( - () => createDerivedIndexPattern(), - [createDerivedIndexPattern] - ); - const updateStart = useCallback((date: Moment) => { setStartDate(date); }, []); @@ -135,9 +130,9 @@ export const JobSetupScreen = (props: Props) => { const onFilterChange = useCallback( (f: string) => { setFilter(f || ''); - setFilterQuery(convertKueryToElasticSearchQuery(f, derivedIndexPattern) || ''); + setFilterQuery(convertKueryToElasticSearchQuery(f, metricsView?.dataViewReference) || ''); }, - [derivedIndexPattern] + [metricsView?.dataViewReference] ); /* eslint-disable-next-line react-hooks/exhaustive-deps */ @@ -323,7 +318,7 @@ export const JobSetupScreen = (props: Props) => { selectedOptions={ partitionField ? partitionField.map((p) => ({ label: p })) : undefined } - options={derivedIndexPattern.fields + options={(metricsView?.fields ?? []) .filter((f) => f.aggregatable && f.type === 'string') .map((f) => ({ label: f.name }))} onChange={onPartitionFieldChange} @@ -358,7 +353,6 @@ export const JobSetupScreen = (props: Props) => { } > { + const { + services: { dataViews }, + } = useKibanaContextForPlugin(); + + const { source } = useSourceContext(); + + const [state, refetch] = useAsyncFn(async () => { + const indexPattern = source?.configuration.metricAlias; + if (!indexPattern) { + return Promise.resolve(undefined); + } + + return resolveAdHocDataView({ + dataViewsService: dataViews, + dataViewId: indexPattern, + attributes: { + name: DEFAULT_METRICS_VIEW_ATTRIBUTES.name, + timeFieldName: DEFAULT_METRICS_VIEW_ATTRIBUTES.timeFieldName, + }, + }); + }, [dataViews, source?.configuration.metricAlias]); + + useEffect(() => { + refetch(); + }, [refetch]); + + const { value: metricsView, error, loading } = state; + + return { + metricsView, + loading, + error, + refetch, + }; +}; + +export const [MetricsDataViewProvider, useMetricsDataViewContext] = + createContainer(useMetricsDataView); diff --git a/x-pack/plugins/observability_solution/infra/public/containers/metrics_source/source.tsx b/x-pack/plugins/observability_solution/infra/public/containers/metrics_source/source.tsx index 336b07b698675..77024a6165502 100644 --- a/x-pack/plugins/observability_solution/infra/public/containers/metrics_source/source.tsx +++ b/x-pack/plugins/observability_solution/infra/public/containers/metrics_source/source.tsx @@ -19,44 +19,32 @@ import type { import { useTrackedPromise } from '../../utils/use_tracked_promise'; import { MissingHttpClientException } from './source_errors'; import { useSourceNotifier } from './notifications'; +import { MetricsDataViewProvider } from './metrics_view'; -export const pickIndexPattern = ( - source: MetricsSourceConfiguration | undefined, - type: 'metrics' -) => { - if (!source) { - return 'unknown-index'; - } - if (type === 'metrics') { - return source.configuration.metricAlias; - } - return `${source.configuration.metricAlias}`; -}; +const API_URL = `/api/metrics/source`; -export const useSource = ({ sourceId }: { sourceId: string }) => { +export const useSourceFetcher = ({ sourceId }: { sourceId: string }) => { + const [source, setSource] = useState(undefined); const { services: { http, telemetry }, } = useKibanaContextForPlugin(); - const notify = useSourceNotifier(); - const fetchService = http; - const API_URL = `/api/metrics/source/${sourceId}`; - - const [source, setSource] = useState(undefined); - const [loadSourceRequest, loadSource] = useTrackedPromise( { cancelPreviousOn: 'resolution', createPromise: async () => { - if (!fetchService) { + if (!http) { throw new MissingHttpClientException(); } const start = performance.now(); - const response = await fetchService.fetch(API_URL, { - method: 'GET', - }); + const response = await http.fetch( + `${API_URL}/${sourceId}`, + { + method: 'GET', + } + ); telemetry?.reportPerformanceMetricEvent( 'infra_source_load', performance.now() - start, @@ -71,17 +59,17 @@ export const useSource = ({ sourceId }: { sourceId: string }) => { } }, }, - [fetchService, sourceId] + [http, sourceId] ); - const [createSourceConfigurationRequest, createSourceConfiguration] = useTrackedPromise( + const [persistSourceConfigurationRequest, persistSourceConfiguration] = useTrackedPromise( { createPromise: async (sourceProperties: PartialMetricsSourceConfigurationProperties) => { - if (!fetchService) { + if (!http) { throw new MissingHttpClientException(); } - return await fetchService.patch(API_URL, { + return await http.patch(`${API_URL}/${sourceId}`, { method: 'PATCH', body: JSON.stringify(sourceProperties), }); @@ -96,60 +84,60 @@ export const useSource = ({ sourceId }: { sourceId: string }) => { notify.updateFailure((error as IHttpFetchError<{ message: string }>).body?.message); }, }, - [fetchService, sourceId] + [http, sourceId] ); useEffect(() => { loadSource(); }, [loadSource, sourceId]); - const createDerivedIndexPattern = () => { - return { - fields: source?.status ? source.status.indexFields : [], - title: pickIndexPattern(source, 'metrics'), - }; + const error = loadSourceRequest.state === 'rejected' ? `${loadSourceRequest.value}` : undefined; + const isLoading = + loadSourceRequest.state === 'uninitialized' || + loadSourceRequest.state === 'pending' || + persistSourceConfigurationRequest.state === 'pending'; + + return { + error, + loadSource, + isLoading, + source, + persistSourceConfiguration, }; +}; - const hasFailedLoadingSource = loadSourceRequest.state === 'rejected'; - const isUninitialized = loadSourceRequest.state === 'uninitialized'; - const isLoadingSource = loadSourceRequest.state === 'pending'; - const isLoading = isLoadingSource || createSourceConfigurationRequest.state === 'pending'; +export const useSource = ({ sourceId }: { sourceId: string }) => { + const { persistSourceConfiguration, source, error, isLoading, loadSource } = useSourceFetcher({ + sourceId, + }); const sourceExists = source ? !!source.version : undefined; const metricIndicesExist = Boolean(source?.status?.metricIndicesExist); - const version = source?.version; - return { - createSourceConfiguration, - createDerivedIndexPattern, isLoading, - isLoadingSource, - isUninitialized, - hasFailedLoadingSource, + error, loadSource, - loadSourceRequest, - loadSourceFailureMessage: hasFailedLoadingSource ? `${loadSourceRequest.value}` : undefined, metricIndicesExist, source, sourceExists, sourceId, - updateSourceConfiguration: createSourceConfiguration, - version, + persistSourceConfiguration, }; }; export const [SourceProvider, useSourceContext] = createContainer(useSource); export const withSourceProvider = - (Component: React.FunctionComponent) => + (Component: React.FC) => (sourceId = 'default') => { return function ComponentWithSourceProvider(props: ComponentProps) { return ( - {/* @ts-expect-error upgrade typescript v4.9.5*/} - + + + ); }; diff --git a/x-pack/plugins/observability_solution/infra/public/containers/metrics_source/types.ts b/x-pack/plugins/observability_solution/infra/public/containers/metrics_source/types.ts deleted file mode 100644 index 28b022347604b..0000000000000 --- a/x-pack/plugins/observability_solution/infra/public/containers/metrics_source/types.ts +++ /dev/null @@ -1,15 +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 { MetricsSourceStatus } from '../../../common/metrics_sources'; - -export interface DerivedIndexPattern { - fields: MetricsSourceStatus['indexFields']; - title: string; -} - -export type CreateDerivedIndexPattern = () => DerivedIndexPattern; diff --git a/x-pack/plugins/observability_solution/infra/public/containers/with_kuery_autocompletion.tsx b/x-pack/plugins/observability_solution/infra/public/containers/with_kuery_autocompletion.tsx index f9177a23d1e51..4ee3a5e144727 100644 --- a/x-pack/plugins/observability_solution/infra/public/containers/with_kuery_autocompletion.tsx +++ b/x-pack/plugins/observability_solution/infra/public/containers/with_kuery_autocompletion.tsx @@ -6,7 +6,6 @@ */ import React from 'react'; -import { DataViewBase } from '@kbn/es-query'; import { withKibana, KibanaReactContextValue, @@ -24,7 +23,7 @@ interface WithKueryAutocompletionLifecycleProps { loadSuggestions: (expression: string, cursorPosition: number, maxSuggestions?: number) => void; suggestions: QuerySuggestion[]; }>; - indexPattern: DataViewBase; + dataView?: DataView; } interface WithKueryAutocompletionLifecycleState { @@ -62,7 +61,7 @@ class WithKueryAutocompletionComponent extends React.Component< maxSuggestions?: number, transformSuggestions?: (s: QuerySuggestion[]) => QuerySuggestion[] ) => { - const { indexPattern } = this.props; + const { dataView } = this.props; const language = 'kuery'; const hasQuerySuggestions = this.props.kibana.services.unifiedSearch.autocomplete.hasQuerySuggestions(language); @@ -79,15 +78,16 @@ class WithKueryAutocompletionComponent extends React.Component< suggestions: [], }); - const suggestions = - (await this.props.kibana.services.unifiedSearch.autocomplete.getQuerySuggestions({ - language, - query: expression, - selectionStart: cursorPosition, - selectionEnd: cursorPosition, - indexPatterns: [indexPattern as DataView], - boolFilter: [], - })) || []; + const suggestions = dataView + ? (await this.props.kibana.services.unifiedSearch.autocomplete.getQuerySuggestions({ + language, + query: expression, + selectionStart: cursorPosition, + selectionEnd: cursorPosition, + indexPatterns: [dataView], + boolFilter: [], + })) ?? [] + : []; const transformedSuggestions = transformSuggestions ? transformSuggestions(suggestions) diff --git a/x-pack/plugins/observability_solution/infra/public/hooks/use_data_view.test.ts b/x-pack/plugins/observability_solution/infra/public/hooks/use_data_view.test.ts deleted file mode 100644 index 157a594498273..0000000000000 --- a/x-pack/plugins/observability_solution/infra/public/hooks/use_data_view.test.ts +++ /dev/null @@ -1,79 +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 { useDataView } from './use_data_view'; -import { renderHook } from '@testing-library/react-hooks'; -import { type KibanaReactContextValue, useKibana } from '@kbn/kibana-react-plugin/public'; -import { coreMock } from '@kbn/core/public/mocks'; -import type { DataView, DataViewsServicePublic } from '@kbn/data-views-plugin/public'; -import type { InfraClientStartDeps } from '../types'; -import { CoreStart } from '@kbn/core/public'; - -jest.mock('@kbn/kibana-react-plugin/public'); - -let dataViewMock: jest.Mocked; -const useKibanaMock = useKibana as jest.MockedFunction; - -const mockUseKibana = () => { - useKibanaMock.mockReturnValue({ - services: { - ...coreMock.createStart(), - dataViews: dataViewMock, - } as Partial & Partial, - } as unknown as KibanaReactContextValue & Partial>); -}; - -const mockDataView = { - id: 'mock-id', - title: 'mock-title', - timeFieldName: 'mock-time-field-name', - isPersisted: () => false, - getName: () => 'mock-data-view', - toSpec: () => ({}), -} as jest.Mocked; - -describe('useDataView hook', () => { - beforeEach(() => { - dataViewMock = { - create: jest.fn().mockImplementation(() => Promise.resolve(mockDataView)), - get: jest.fn().mockImplementation(() => Promise.reject(new Error('Data view not found'))), - } as Partial as jest.Mocked; - - mockUseKibana(); - }); - - it('should create a new ad-hoc data view', async () => { - const { result, waitForNextUpdate } = renderHook(() => useDataView({ index: 'test' })); - - await waitForNextUpdate(); - expect(result.current.loading).toEqual(false); - expect(result.current.error).toBeUndefined(); - expect(result.current.dataView).toEqual(mockDataView); - }); - - it('should create a dataview with unique id for metricAlias metrics', async () => { - const { waitForNextUpdate } = renderHook(() => useDataView({ index: 'metrics' })); - - await waitForNextUpdate(); - expect(dataViewMock.create).toHaveBeenCalledWith({ - id: 'infra_metrics_212933f0-c55e-5a36-8b13-e724aed2f66d', - timeFieldName: '@timestamp', - title: 'metrics', - }); - }); - - it('should create a dataview with unique id for metricAlias remote-metrics', async () => { - const { waitForNextUpdate } = renderHook(() => useDataView({ index: 'remote-metrics' })); - - await waitForNextUpdate(); - expect(dataViewMock.create).toHaveBeenCalledWith({ - id: 'infra_metrics_e40bb657-0351-548e-8e73-093851d9bb6e', - timeFieldName: '@timestamp', - title: 'remote-metrics', - }); - }); -}); diff --git a/x-pack/plugins/observability_solution/infra/public/hooks/use_data_view.ts b/x-pack/plugins/observability_solution/infra/public/hooks/use_data_view.ts deleted file mode 100644 index 5ad22e76d2622..0000000000000 --- a/x-pack/plugins/observability_solution/infra/public/hooks/use_data_view.ts +++ /dev/null @@ -1,49 +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 { v5 as uuidv5 } from 'uuid'; -import useAsyncRetry from 'react-use/lib/useAsyncRetry'; -import { useKibanaContextForPlugin } from './use_kibana'; - -export const TIMESTAMP_FIELD = '@timestamp'; -export const DATA_VIEW_PREFIX = 'infra_metrics'; - -export const generateDataViewId = (index: string) => { - // generates a unique but the same uuid as long as the index pattern doesn't change - return `${DATA_VIEW_PREFIX}_${uuidv5(index, uuidv5.DNS)}`; -}; - -export const useDataView = ({ index }: { index?: string }) => { - const { - services: { dataViews }, - } = useKibanaContextForPlugin(); - - const state = useAsyncRetry(async () => { - if (!index) { - return Promise.resolve(undefined); - } - - return dataViews.get(index, false).catch(() => - // if data view doesn't exist, create an ad-hoc one - dataViews.create({ - id: generateDataViewId(index), - title: index, - timeFieldName: TIMESTAMP_FIELD, - }) - ); - }, [index]); - - const { value: dataView, loading, error, retry } = state; - - return { - index, - dataView, - loading, - retry, - error, - }; -}; diff --git a/x-pack/plugins/observability_solution/infra/public/hooks/use_inventory_views.ts b/x-pack/plugins/observability_solution/infra/public/hooks/use_inventory_views.ts index 35bb5a154379d..a8856e9742e63 100644 --- a/x-pack/plugins/observability_solution/infra/public/hooks/use_inventory_views.ts +++ b/x-pack/plugins/observability_solution/infra/public/hooks/use_inventory_views.ts @@ -47,7 +47,7 @@ export const useInventoryViews = (): UseInventoryViewsResult => { const trackMetric = useUiTracker({ app: 'infra_metrics' }); const queryClient = useQueryClient(); - const { source, updateSourceConfiguration } = useSourceContext(); + const { source, persistSourceConfiguration } = useSourceContext(); const defaultViewId = source?.configuration.inventoryDefaultView ?? '0'; @@ -93,7 +93,7 @@ export const useInventoryViews = (): UseInventoryViewsResult => { string, MutationContext >({ - mutationFn: (id) => updateSourceConfiguration({ inventoryDefaultView: id }), + mutationFn: (id) => persistSourceConfiguration({ inventoryDefaultView: id }), /** * To provide a quick feedback, we perform an optimistic update on the list * when updating the default view. diff --git a/x-pack/plugins/observability_solution/infra/public/hooks/use_metrics_explorer_views.ts b/x-pack/plugins/observability_solution/infra/public/hooks/use_metrics_explorer_views.ts index 7e0eb3bd387a1..fc66789c22962 100644 --- a/x-pack/plugins/observability_solution/infra/public/hooks/use_metrics_explorer_views.ts +++ b/x-pack/plugins/observability_solution/infra/public/hooks/use_metrics_explorer_views.ts @@ -52,7 +52,7 @@ export const useMetricsExplorerViews = (): UseMetricsExplorerViewsResult => { const trackMetric = useUiTracker({ app: 'infra_metrics' }); const queryClient = useQueryClient(); - const { source, updateSourceConfiguration } = useSourceContext(); + const { source, persistSourceConfiguration } = useSourceContext(); const defaultViewId = source?.configuration.metricsExplorerDefaultView ?? '0'; @@ -98,7 +98,7 @@ export const useMetricsExplorerViews = (): UseMetricsExplorerViewsResult => { string, MutationContext >({ - mutationFn: (id) => updateSourceConfiguration({ metricsExplorerDefaultView: id }), + mutationFn: (id) => persistSourceConfiguration({ metricsExplorerDefaultView: id }), /** * To provide a quick feedback, we perform an optimistic update on the list * when updating the default view. diff --git a/x-pack/plugins/observability_solution/infra/public/pages/404.tsx b/x-pack/plugins/observability_solution/infra/public/pages/404.tsx index e0a87b6af4235..8f4333a6b6e26 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/404.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/404.tsx @@ -7,21 +7,29 @@ import React from 'react'; import { NotFoundPrompt } from '@kbn/shared-ux-prompt-not-found'; -import { MetricsPageTemplate } from './metrics/page_template'; +import { useKibanaContextForPlugin } from '../hooks/use_kibana'; interface NotFoundPageProps { title: string; } export const NotFoundPage = ({ title }: NotFoundPageProps) => { + const { + services: { + observabilityShared: { + navigation: { PageTemplate }, + }, + }, + } = useKibanaContextForPlugin(); + return ( - - + ); }; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/link_to/redirect_to_host_detail_via_ip.tsx b/x-pack/plugins/observability_solution/infra/public/pages/link_to/redirect_to_host_detail_via_ip.tsx index ad7b3e6e509fd..b80708c91c2cd 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/link_to/redirect_to_host_detail_via_ip.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/link_to/redirect_to_host_detail_via_ip.tsx @@ -14,7 +14,7 @@ import { ASSET_DETAILS_LOCATOR_ID } from '@kbn/observability-shared-plugin/publi import { useHostIpToName } from './use_host_ip_to_name'; import { LoadingPage } from '../../components/loading_page'; import { Error } from '../error'; -import { useSourceContext } from '../../containers/metrics_source'; +import { useMetricsDataViewContext } from '../../containers/metrics_source'; import { useKibanaContextForPlugin } from '../../hooks/use_kibana'; import { getSearchParams } from './redirect_to_node_detail'; @@ -28,16 +28,13 @@ export const RedirectToHostDetailViaIP = ({ }, location, }: RedirectToHostDetailType) => { - const { source } = useSourceContext(); + const { metricsView } = useMetricsDataViewContext(); const { services: { share }, } = useKibanaContextForPlugin(); const baseLocator = share.url.locators.get(ASSET_DETAILS_LOCATOR_ID); - const { error, name } = useHostIpToName( - hostIp, - (source && source.configuration && source.configuration.metricAlias) || null - ); + const { error, name } = useHostIpToName(hostIp, (metricsView && metricsView.indices) || null); useEffect(() => { if (name) { diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/host_details_flyout/flyout_wrapper.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/host_details_flyout/flyout_wrapper.tsx index d7e36d950d4ca..694196cf1a0ac 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/host_details_flyout/flyout_wrapper.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/host_details_flyout/flyout_wrapper.tsx @@ -6,7 +6,6 @@ */ import React from 'react'; -import { useSourceContext } from '../../../../../containers/metrics_source'; import { useUnifiedSearchContext } from '../../hooks/use_unified_search'; import type { HostNodeRow } from '../../hooks/use_hosts_table'; import { AssetDetails } from '../../../../../components/asset_details'; @@ -18,10 +17,9 @@ export interface Props { } export const FlyoutWrapper = ({ node: { name }, closeFlyout }: Props) => { - const { source } = useSourceContext(); const { parsedDateRange } = useUnifiedSearchContext(); - return source ? ( + return ( { mode: 'flyout', closeFlyout, }} - metricAlias={source.configuration.metricAlias} /> - ) : null; + ); }; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/hosts_container.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/hosts_container.tsx index 5b5fab795ff81..044592e338789 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/hosts_container.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/hosts_container.tsx @@ -7,45 +7,12 @@ import React from 'react'; import { EuiSpacer } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { InfraLoadingPanel } from '../../../../components/loading'; -import { useMetricsDataViewContext } from '../hooks/use_metrics_data_view'; import { UnifiedSearchBar } from './search_bar/unified_search_bar'; import { HostsContent } from './hosts_content'; -import { ErrorCallout } from './error_callout'; import { UnifiedSearchProvider } from '../hooks/use_unified_search'; export const HostContainer = () => { - const { dataView, loading, error, metricAlias, retry } = useMetricsDataViewContext(); - - const isLoading = loading || !dataView; - if (isLoading && !error) { - return ( - - ); - } - - return error ? ( - - ) : ( + return ( diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/kpis/kpi_charts.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/kpis/kpi_charts.tsx index 9fd8f40fa08c7..9b349441c5876 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/kpis/kpi_charts.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/kpis/kpi_charts.tsx @@ -12,13 +12,13 @@ import { useUnifiedSearchContext } from '../../hooks/use_unified_search'; import { useHostsViewContext } from '../../hooks/use_hosts_view'; import { useHostCountContext } from '../../hooks/use_host_count'; import { useAfterLoadedState } from '../../hooks/use_after_loaded_state'; -import { useMetricsDataViewContext } from '../../hooks/use_metrics_data_view'; +import { useMetricsDataViewContext } from '../../../../../containers/metrics_source'; export const KpiCharts = () => { const { searchCriteria } = useUnifiedSearchContext(); const { hostNodes, loading: hostsLoading, searchSessionId } = useHostsViewContext(); const { isRequestRunning: hostCountLoading, data: hostCountData } = useHostCountContext(); - const { dataView } = useMetricsDataViewContext(); + const { metricsView } = useMetricsDataViewContext(); const shouldUseSearchCriteria = hostNodes.length === 0; const loading = hostsLoading || hostCountLoading; @@ -29,7 +29,7 @@ export const KpiCharts = () => { buildCombinedAssetFilter({ field: 'host.name', values: hostNodes.map((p) => p.name), - dataView, + dataView: metricsView?.dataViewReference, }), ]; @@ -71,7 +71,7 @@ export const KpiCharts = () => { return ( { const { services: { unifiedSearch, application }, } = useKibanaContextForPlugin(); - const { dataView } = useMetricsDataViewContext(); + const { metricsView } = useMetricsDataViewContext(); const { searchCriteria, onSubmit } = useUnifiedSearchContext(); const { SearchBar } = unifiedSearch.ui; @@ -52,7 +52,7 @@ export const UnifiedSearchBar = () => { 0.5)', })} @@ -75,7 +75,7 @@ export const UnifiedSearchBar = () => { { const { searchCriteria } = useUnifiedSearchContext(); const { loading, searchSessionId } = useHostsViewContext(); const { currentPage } = useHostsTableContext(); - const { dataView } = useDataView({ index: (chartProps.dataset as LensDataviewDataset)?.index }); + const { + services: { dataViews }, + } = useKibanaContextForPlugin(); const shouldUseSearchCriteria = currentPage.length === 0; @@ -36,22 +41,27 @@ export const Chart = ({ id, ...chartProps }: ChartProps) => { searchSessionId, }); - const filters = useMemo(() => { + const { value: filters = [] } = useAsync(async () => { + const resolvedDataView = await resolveDataView({ + dataViewId: (chartProps.dataset as LensDataviewDataset)?.index, + dataViewsService: dataViews, + }); + return shouldUseSearchCriteria ? [...searchCriteria.filters, ...(searchCriteria.panelFilters ?? [])] : [ buildCombinedAssetFilter({ - field: 'host.name', + field: HOST_NAME_FIELD, values: currentPage.map((p) => p.name), - dataView, + dataView: resolvedDataView.dataViewReference, }), ]; }, [ - shouldUseSearchCriteria, + currentPage, + dataViews, + chartProps.dataset, searchCriteria.filters, searchCriteria.panelFilters, - currentPage, - dataView, ]); return ( diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/tabs/metrics/metrics_grid.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/tabs/metrics/metrics_grid.tsx index aafe961b7dc0b..49e833a74a33e 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/tabs/metrics/metrics_grid.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/tabs/metrics/metrics_grid.tsx @@ -10,13 +10,12 @@ import { EuiFlexGrid, EuiFlexItem, EuiText, EuiFlexGroup, EuiSpacer } from '@ela import { HostMetricsExplanationContent } from '../../../../../../components/lens'; import { Chart } from './chart'; import { Popover } from '../../common/popover'; -import { useMetricsDataViewContext } from '../../../hooks/use_metrics_data_view'; +import { useMetricsDataViewContext } from '../../../../../../containers/metrics_source'; import { useMetricsCharts } from '../../../hooks/use_metrics_charts'; export const MetricsGrid = () => { - const { dataView } = useMetricsDataViewContext(); - - const charts = useMetricsCharts({ dataViewId: dataView?.id }); + const { metricsView } = useMetricsDataViewContext(); + const charts = useMetricsCharts({ dataViewId: metricsView?.dataViewReference.id }); return ( <> diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.ts index c68ec312abab1..d3592cc050884 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_host_count.ts @@ -12,15 +12,16 @@ import { useCallback, useEffect, useMemo } from 'react'; import { catchError, map, Observable, of, startWith, tap } from 'rxjs'; import createContainer from 'constate'; import type { QueryDslQueryContainer, SearchResponse } from '@elastic/elasticsearch/lib/api/types'; +import { HOST_NAME_FIELD, TIMESTAMP_FIELD } from '../../../../../common/constants'; import type { ITelemetryClient } from '../../../../services/telemetry'; import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { decodeOrThrow } from '../../../../../common/runtime_types'; import { useDataSearch, useLatestPartialDataSearchResponse } from '../../../../utils/data_search'; -import { useMetricsDataViewContext } from './use_metrics_data_view'; +import { useMetricsDataViewContext } from '../../../../containers/metrics_source'; import { useUnifiedSearchContext } from './use_unified_search'; export const useHostCount = () => { - const { dataView, metricAlias } = useMetricsDataViewContext(); + const { metricsView } = useMetricsDataViewContext(); const { services: { telemetry }, } = useKibanaContextForPlugin(); @@ -37,12 +38,12 @@ export const useHostCount = () => { ...query.bool.filter, { exists: { - field: 'host.name', + field: HOST_NAME_FIELD, }, }, { range: { - [dataView?.timeFieldName ?? '@timestamp']: { + [metricsView?.timeFieldName ?? TIMESTAMP_FIELD]: { gte: searchCriteria.dateRange.from, lte: searchCriteria.dateRange.to, }, @@ -57,7 +58,7 @@ export const useHostCount = () => { params: { allow_no_indices: true, ignore_unavailable: true, - index: metricAlias, + index: metricsView?.indices, size: 0, track_total_hits: false, body: { @@ -65,7 +66,7 @@ export const useHostCount = () => { aggs: { count: { cardinality: { - field: 'host.name', + field: HOST_NAME_FIELD, }, }, }, @@ -76,8 +77,8 @@ export const useHostCount = () => { }; }, [ buildQuery, - dataView?.timeFieldName, - metricAlias, + metricsView?.indices, + metricsView?.timeFieldName, searchCriteria.dateRange.from, searchCriteria.dateRange.to, ]), diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts index 9534406d5dcfa..5df80a9e3634d 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.test.ts @@ -11,11 +11,13 @@ import { InfraAssetMetricsItem } from '../../../../../common/http_api'; import * as useUnifiedSearchHooks from './use_unified_search'; import * as useHostsViewHooks from './use_hosts_view'; import * as useKibanaContextForPluginHook from '../../../../hooks/use_kibana'; -import * as useMetricsDataViewHooks from './use_metrics_data_view'; +import * as useMetricsDataViewHooks from '../../../../containers/metrics_source'; +import type { DataView } from '@kbn/data-views-plugin/common'; +import { TIMESTAMP_FIELD } from '../../../../../common/constants'; jest.mock('./use_unified_search'); jest.mock('./use_hosts_view'); -jest.mock('./use_metrics_data_view'); +jest.mock('../../../../containers/metrics_source'); jest.mock('../../../../hooks/use_kibana'); const mockUseUnifiedSearchContext = @@ -138,7 +140,15 @@ describe('useHostTable hook', () => { } as ReturnType); mockUseMetricsDataViewContext.mockReturnValue({ - dataView: { id: 'default' }, + metricsView: { + indices: 'metrics-*', + fields: [], + timeFieldName: TIMESTAMP_FIELD, + dataViewReference: { id: 'default' } as DataView, + }, + error: undefined, + loading: false, + refetch: jest.fn(), } as ReturnType); mockUseKibanaContextForPlugin.mockReturnValue({ diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx index 0cf70b4b4182b..cdafb71784ab9 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_hosts_table.tsx @@ -15,6 +15,7 @@ import { CloudProvider } from '@kbn/custom-icons'; import { findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; import { EuiToolTip } from '@elastic/eui'; import { EuiBadge } from '@elastic/eui'; +import { HOST_NAME_FIELD } from '../../../../../common/constants'; import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { createInventoryMetricFormatter } from '../../inventory_view/lib/create_inventory_metric_formatter'; import { EntryTitle } from '../components/table/entry_title'; @@ -25,7 +26,7 @@ import type { } from '../../../../../common/http_api'; import { Sorting, useHostsTableUrlState } from './use_hosts_table_url_state'; import { useHostsViewContext } from './use_hosts_view'; -import { useMetricsDataViewContext } from './use_metrics_data_view'; +import { useMetricsDataViewContext } from '../../../../containers/metrics_source'; import { ColumnHeader } from '../components/table/column_header'; import { TABLE_COLUMN_LABEL, TABLE_CONTENT_LABEL } from '../translations'; import { METRICS_TOOLTIP } from '../../../../common/visualizations'; @@ -138,7 +139,7 @@ export const useHostsTable = () => { }, }, } = useKibanaContextForPlugin(); - const { dataView } = useMetricsDataViewContext(); + const { metricsView } = useMetricsDataViewContext(); const closeFlyout = useCallback(() => setProperties({ detailsItemId: null }), [setProperties]); @@ -152,14 +153,14 @@ export const useHostsTable = () => { } const selectedHostNames = selectedItems.map(({ name }) => name); const newFilter = buildCombinedAssetFilter({ - field: 'host.name', + field: HOST_NAME_FIELD, values: selectedHostNames, - dataView, + dataView: metricsView?.dataViewReference, }); filterManagerService.addFilters(newFilter); setSelectedItems([]); - }, [dataView, filterManagerService, selectedItems]); + }, [filterManagerService, metricsView?.dataViewReference, selectedItems]); const reportHostEntryClick = useCallback( ({ name, cloudProvider }: HostNodeRow['title']) => { diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_metrics_data_view.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_metrics_data_view.ts deleted file mode 100644 index 4c62bc58f00a9..0000000000000 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_metrics_data_view.ts +++ /dev/null @@ -1,26 +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 createContainer from 'constate'; -import { useDataView } from '../../../../hooks/use_data_view'; - -export const useMetricsDataView = ({ metricAlias }: { metricAlias: string }) => { - const { dataView, loading, retry, error } = useDataView({ - index: metricAlias, - }); - - return { - metricAlias, - dataView, - loading, - retry, - error, - }; -}; - -export const MetricsDataView = createContainer(useMetricsDataView); -export const [MetricsDataViewProvider, useMetricsDataViewContext] = MetricsDataView; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_unified_search.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_unified_search.ts index ac6e1d9a5f9e7..4063db1e41727 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_unified_search.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/hooks/use_unified_search.ts @@ -15,7 +15,7 @@ import { parseDateRange } from '../../../../utils/datemath'; import { useKibanaQuerySettings } from '../../../../utils/use_kibana_query_settings'; import { useKibanaContextForPlugin } from '../../../../hooks/use_kibana'; import { telemetryTimeRangeFormatter } from '../../../../../common/formatters/telemetry_time_range'; -import { useMetricsDataViewContext } from './use_metrics_data_view'; +import { useMetricsDataViewContext } from '../../../../containers/metrics_source'; import { HostsSearchPayload, useHostsUrlState, @@ -52,7 +52,7 @@ const getDefaultTimestamps = () => { export const useUnifiedSearch = () => { const [error, setError] = useState(null); const [searchCriteria, setSearch] = useHostsUrlState(); - const { dataView } = useMetricsDataViewContext(); + const { metricsView } = useMetricsDataViewContext(); const { services } = useKibanaContextForPlugin(); const kibanaQuerySettings = useKibanaQuerySettings(); @@ -116,13 +116,13 @@ export const useUnifiedSearch = () => { const buildQuery = useCallback(() => { return buildEsQuery( - dataView, + metricsView?.dataViewReference, searchCriteria.query, [...searchCriteria.filters, ...searchCriteria.panelFilters], kibanaQuerySettings ); }, [ - dataView, + metricsView?.dataViewReference, searchCriteria.query, searchCriteria.filters, searchCriteria.panelFilters, diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/index.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/index.tsx index 80dc5a3977c75..998262283cf9a 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/index.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/index.tsx @@ -12,23 +12,17 @@ import { APP_WRAPPER_CLASS } from '@kbn/core/public'; import { css } from '@emotion/react'; import { i18n } from '@kbn/i18n'; import { useKibanaEnvironmentContext } from '../../../hooks/use_kibana'; -import { SourceErrorPage } from '../../../components/source_error_page'; -import { SourceLoadingPage } from '../../../components/source_loading_page'; -import { useSourceContext } from '../../../containers/metrics_source'; import { useMetricsBreadcrumbs } from '../../../hooks/use_metrics_breadcrumbs'; import { MetricsPageTemplate } from '../page_template'; import { hostsTitle } from '../../../translations'; -import { MetricsDataViewProvider } from './hooks/use_metrics_data_view'; import { fullHeightContentStyles } from '../../../page_template.styles'; import { HostContainer } from './components/hosts_container'; import { BetaBadge } from '../../../components/beta_badge'; -import { NoRemoteCluster } from '../../../components/empty_states'; const HOSTS_FEEDBACK_LINK = 'https://docs.google.com/forms/d/e/1FAIpQLScRHG8TIVb1Oq8ZhD4aks3P1TmgiM58TY123QpDCcBz83YC6w/viewform'; export const HostsPage = () => { - const { isLoading, loadSourceFailureMessage, loadSource, source } = useSourceContext(); const { kibanaVersion, isCloudEnv, isServerlessEnv } = useKibanaEnvironmentContext(); useTrackPageview({ app: 'infra_metrics', path: 'hosts' }); @@ -40,28 +34,10 @@ export const HostsPage = () => { }, ]); - const { metricIndicesExist, remoteClustersExist } = source?.status ?? {}; - - if (isLoading && !source) return ; - - if (!remoteClustersExist) { - return ; - } - - if (!metricIndicesExist) { - return ( - - ); - } - - if (loadSourceFailureMessage) - return ; - return (
{ }, }} > - {source && ( - - - - )} +
diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/index.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/index.tsx index d87706a587b8b..8a96b1c2c6b6e 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/index.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/index.tsx @@ -20,22 +20,17 @@ import { import { useKibana, useUiSetting } from '@kbn/kibana-react-plugin/public'; import { HeaderMenuPortal, useLinkProps } from '@kbn/observability-shared-plugin/public'; import { enableInfrastructureHostsView } from '@kbn/observability-plugin/common'; -import { MetricsSourceConfigurationProperties } from '../../../common/metrics_sources'; import { HelpCenterContent } from '../../components/help_center_content'; import { useReadOnlyBadge } from '../../hooks/use_readonly_badge'; -import { MetricsExplorerOptionsContainer } from './metrics_explorer/hooks/use_metrics_explorer_options'; -import { WithMetricsExplorerOptionsUrlState } from '../../containers/metrics_explorer/with_metrics_explorer_options_url_state'; import { MetricsExplorerPage } from './metrics_explorer'; import { SnapshotPage } from './inventory_view'; import { NodeDetail } from './metric_detail'; import { MetricsSettingsPage } from './settings'; -import { SourceLoadingPage } from '../../components/source_loading_page'; import { MetricsAlertDropdown } from '../../alerting/common/components/metrics_alert_dropdown'; import { AlertPrefillProvider } from '../../alerting/use_alert_prefill'; import { InfraMLCapabilitiesProvider } from '../../containers/ml/infra_ml_capabilities'; import { AnomalyDetectionFlyout } from '../../components/ml/anomaly_detection/anomaly_detection_flyout'; import { HeaderActionMenuContext } from '../../utils/header_action_menu_provider'; -import { CreateDerivedIndexPattern, useSourceContext } from '../../containers/metrics_source'; import { NotFoundPage } from '../404'; import { ReactQueryProvider } from '../../containers/react_query_provider'; import { usePluginConfig } from '../../containers/plugin_config_context'; @@ -58,8 +53,6 @@ export const InfrastructurePage = () => { const kibana = useKibana(); - const { source, createDerivedIndexPattern } = useSourceContext(); - useReadOnlyBadge(!uiCapabilities?.infrastructure?.save); const settingsLinkProps = useLinkProps({ @@ -86,18 +79,14 @@ export const InfrastructurePage = () => { {settingsTabTitle} - + { - return ; - }} + path="/hosts" + render={() => } /> { - return ; - }} + path="/detail/host" + render={() => } /> {config.featureFlags.alertsAndRulesDropdownEnabled && ( @@ -120,24 +109,8 @@ export const InfrastructurePage = () => { {config.featureFlags.metricsExplorerEnabled && ( - ( - - - {source?.configuration ? ( - - ) : ( - - )} - - )} - /> + )} - {isHostsViewEnabled && } @@ -162,14 +135,3 @@ export const InfrastructurePage = () => { ); }; - -const PageContent = (props: { - configuration: MetricsSourceConfigurationProperties; - createDerivedIndexPattern: CreateDerivedIndexPattern; -}) => { - const { createDerivedIndexPattern, configuration } = props; - - return ( - - ); -}; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/search_bar.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/search_bar.tsx index 7386322774442..8b56c6468dc0f 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/search_bar.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/search_bar.tsx @@ -7,13 +7,13 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; -import { useSourceContext } from '../../../../containers/metrics_source'; +import { useMetricsDataViewContext } from '../../../../containers/metrics_source'; import { AutocompleteField } from '../../../../components/autocomplete_field'; import { WithKueryAutocompletion } from '../../../../containers/with_kuery_autocompletion'; import { useWaffleFiltersContext } from '../hooks/use_waffle_filters'; export const SearchBar = () => { - const { createDerivedIndexPattern } = useSourceContext(); + const { metricsView } = useMetricsDataViewContext(); const { applyFilterQueryFromKueryExpression, filterQueryDraft, @@ -21,7 +21,7 @@ export const SearchBar = () => { setFilterQueryDraftFromKueryExpression, } = useWaffleFiltersContext(); return ( - + {({ isLoadingSuggestions, loadSuggestions, suggestions }) => ( { })} suggestions={suggestions} value={filterQueryDraft ? filterQueryDraft : ''} - autoFocus={true} + autoFocus /> )} diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/toolbars/metrics_and_groupby_toolbar_items.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/toolbars/metrics_and_groupby_toolbar_items.tsx index edf124978c093..cdfefd037e0c7 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/toolbars/metrics_and_groupby_toolbar_items.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/toolbars/metrics_and_groupby_toolbar_items.tsx @@ -36,7 +36,6 @@ export const MetricsAndGroupByToolbarItems = (props: Props) => { <> { groupBy={props.groupBy} nodeType={props.nodeType} onChange={props.changeGroupBy} - fields={props.createDerivedIndexPattern().fields} onChangeCustomOptions={props.changeCustomOptions} customOptions={props.customOptions} /> diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/toolbars/toolbar_wrapper.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/toolbars/toolbar_wrapper.tsx index 1b81c3046362a..e1ff4674d9e8d 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/toolbars/toolbar_wrapper.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/toolbars/toolbar_wrapper.tsx @@ -8,7 +8,6 @@ import React from 'react'; import { EuiFlexItem, EuiFlexGroup } from '@elastic/eui'; import { fieldToName } from '../../lib/field_to_display_name'; -import { useSourceContext } from '../../../../../containers/metrics_source'; import { useWaffleOptionsContext } from '../../hooks/use_waffle_options'; import { WaffleInventorySwitcher } from '../waffle/waffle_inventory_switcher'; import { ToolbarProps } from './types'; @@ -37,14 +36,12 @@ export const ToolbarWrapper = (props: Props) => { customMetrics, changeCustomMetrics, } = useWaffleOptionsContext(); - const { createDerivedIndexPattern } = useSourceContext(); return ( {props.children({ - createDerivedIndexPattern, changeMetric, changeGroupBy, changeAccount, diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/toolbars/types.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/toolbars/types.ts index c655cf62d503c..7989049d2c5a8 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/toolbars/types.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/toolbars/types.ts @@ -10,12 +10,10 @@ import { SnapshotGroupBy, SnapshotMetricInput, } from '../../../../../../common/http_api/snapshot_api'; -import { CreateDerivedIndexPattern } from '../../../../../containers/metrics_source'; import { InfraGroupByOptions } from '../../../../../lib/lib'; import { WaffleOptionsState, WaffleSortOption } from '../../hooks/use_waffle_options'; export interface ToolbarProps extends Omit { - createDerivedIndexPattern: CreateDerivedIndexPattern; changeMetric: (payload: SnapshotMetricInput) => void; changeGroupBy: (payload: SnapshotGroupBy) => void; changeCustomOptions: (payload: InfraGroupByOptions[]) => void; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/asset_details_flyout.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/asset_details_flyout.tsx index af87d5470c7d9..909ecdc8910b4 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/asset_details_flyout.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/asset_details_flyout.tsx @@ -9,7 +9,6 @@ import React, { useMemo } from 'react'; import type { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; import type { InfraWaffleMapOptions } from '../../../../../lib/lib'; import { AssetDetails } from '../../../../../components/asset_details'; -import { useSourceContext } from '../../../../../containers/metrics_source'; import { getAssetDetailsFlyoutTabs } from '../../../../../common/asset_details_config/asset_details_tabs'; interface Props { @@ -35,8 +34,6 @@ export const AssetDetailsFlyout = ({ refreshInterval, isAutoReloading = false, }: Props) => { - const { source } = useSourceContext(); - const dateRange = useMemo(() => { // forces relative dates when auto-refresh is active return isAutoReloading @@ -50,7 +47,7 @@ export const AssetDetailsFlyout = ({ }; }, [currentTime, isAutoReloading]); - return source ? ( + return ( - ) : null; + ); }; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/custom_field_panel.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/custom_field_panel.tsx index 95625d3683cc4..cb4d1d57436be 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/custom_field_panel.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/custom_field_panel.tsx @@ -8,11 +8,10 @@ import { EuiButton, EuiComboBox, EuiForm, EuiFormRow } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; +import { useMetricsDataViewContext } from '../../../../../containers/metrics_source'; import { InfraGroupByOptions } from '../../../../../lib/lib'; -import { DerivedIndexPattern } from '../../../../../containers/metrics_source'; interface Props { onSubmit: (field: string) => void; - fields: DerivedIndexPattern['fields']; currentOptions: InfraGroupByOptions[]; } @@ -20,71 +19,65 @@ interface SelectedOption { label: string; } -const initialState = { - selectedOptions: [] as SelectedOption[], -}; - -type State = Readonly; +export const CustomFieldPanel = ({ onSubmit, currentOptions }: Props) => { + const { metricsView } = useMetricsDataViewContext(); + const [selectedOptions, setSelectedOptions] = React.useState([]); -export class CustomFieldPanel extends React.PureComponent { - public static displayName = 'CustomFieldPanel'; - public readonly state: State = initialState; - public render() { - const { fields, currentOptions } = this.props; - const options = fields - .filter( - (f) => - f.aggregatable && - f.type === 'string' && - !(currentOptions && currentOptions.some((o) => o.field === f.name)) - ) - .map((f) => ({ label: f.name })); - const isSubmitDisabled = !this.state.selectedOptions.length; - return ( -
- - - - - - Add - - -
- ); - } - private handleSubmit = () => { - this.props.onSubmit(this.state.selectedOptions[0].label); + const handleSubmit = () => { + onSubmit(selectedOptions[0].label); }; - private handleFieldSelection = (selectedOptions: SelectedOption[]) => { - this.setState({ selectedOptions }); + const handleFieldSelection = (newSelection: SelectedOption[]) => { + setSelectedOptions(newSelection); }; -} + + const options = (metricsView?.fields ?? []) + .filter( + (f) => + f.aggregatable && + f.type === 'string' && + !(currentOptions && currentOptions.some((o) => o.field === f.name)) + ) + .map((f) => ({ label: f.name })); + + const isSubmitDisabled = !selectedOptions.length; + return ( +
+ + + + + + {i18n.translate('xpack.infra..addButtonLabel', { defaultMessage: 'Add' })} + + +
+ ); +}; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/custom_metric_form.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/custom_metric_form.tsx index c3cd96ca5ad43..7182b6f59c448 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/custom_metric_form.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/custom_metric_form.tsx @@ -29,7 +29,7 @@ import { SNAPSHOT_CUSTOM_AGGREGATIONS, SnapshotCustomAggregationRT, } from '../../../../../../../common/http_api/snapshot_api'; -import { DerivedIndexPattern } from '../../../../../../containers/metrics_source'; +import { useMetricsDataViewContext } from '../../../../../../containers/metrics_source'; interface SelectedOption { label: string; @@ -53,202 +53,201 @@ const AGGREGATION_LABELS = { interface Props { theme: EuiTheme | undefined; metric?: SnapshotCustomMetricInput; - fields: DerivedIndexPattern['fields']; customMetrics: SnapshotCustomMetricInput[]; onChange: (metric: SnapshotCustomMetricInput) => void; onCancel: () => void; } -export const CustomMetricForm = withTheme( - ({ theme, onCancel, fields, onChange, metric }: Props) => { - const [label, setLabel] = useState(metric ? metric.label : void 0); - const [aggregation, setAggregation] = useState( - metric ? metric.aggregation : 'avg' - ); - const [field, setField] = useState(metric ? metric.field : void 0); +export const CustomMetricForm = withTheme(({ theme, onCancel, onChange, metric }: Props) => { + const { metricsView } = useMetricsDataViewContext(); + const [label, setLabel] = useState(metric ? metric.label : void 0); + const [aggregation, setAggregation] = useState( + metric ? metric.aggregation : 'avg' + ); + const [field, setField] = useState(metric ? metric.field : void 0); - const handleSubmit = useCallback(() => { - if (metric && aggregation && field) { - onChange({ - ...metric, - label, - aggregation, - field, - }); - } else if (aggregation && field) { - const newMetric: SnapshotCustomMetricInput = { - type: 'custom', - id: uuidv4(), - label, - aggregation, - field, - }; - onChange(newMetric); - } - }, [metric, aggregation, field, onChange, label]); + const handleSubmit = useCallback(() => { + if (metric && aggregation && field) { + onChange({ + ...metric, + label, + aggregation, + field, + }); + } else if (aggregation && field) { + const newMetric: SnapshotCustomMetricInput = { + type: 'custom', + id: uuidv4(), + label, + aggregation, + field, + }; + onChange(newMetric); + } + }, [metric, aggregation, field, onChange, label]); - const handleLabelChange = useCallback( - (e) => { - setLabel(e.target.value); - }, - [setLabel] - ); + const handleLabelChange = useCallback( + (e) => { + setLabel(e.target.value); + }, + [setLabel] + ); - const handleFieldChange = useCallback( - (selectedOptions: SelectedOption[]) => { - setField(selectedOptions[0].label); - }, - [setField] - ); + const handleFieldChange = useCallback( + (selectedOptions: SelectedOption[]) => { + setField(selectedOptions[0].label); + }, + [setField] + ); - const handleAggregationChange = useCallback( - (e) => { - const value = e.target.value; - const aggValue: SnapshotCustomAggregation = SnapshotCustomAggregationRT.is(value) - ? value - : 'avg'; - setAggregation(aggValue); - }, - [setAggregation] - ); + const handleAggregationChange = useCallback( + (e) => { + const value = e.target.value; + const aggValue: SnapshotCustomAggregation = SnapshotCustomAggregationRT.is(value) + ? value + : 'avg'; + setAggregation(aggValue); + }, + [setAggregation] + ); - const fieldOptions = fields - .filter((f) => f.aggregatable && f.type === 'number' && !(field && field === f.name)) - .map((f) => ({ label: f.name })); + const fieldOptions = (metricsView?.fields ?? []) + .filter((f) => f.aggregatable && f.type === 'number' && !(field && field === f.name)) + .map((f) => ({ label: f.name })); - const aggregationOptions = SNAPSHOT_CUSTOM_AGGREGATIONS.map((k) => ({ - text: AGGREGATION_LABELS[k as SnapshotCustomAggregation], - value: k, - })); + const aggregationOptions = SNAPSHOT_CUSTOM_AGGREGATIONS.map((k) => ({ + text: AGGREGATION_LABELS[k as SnapshotCustomAggregation], + value: k, + })); - const isSubmitDisabled = !field || !aggregation; + const isSubmitDisabled = !field || !aggregation; - const title = metric - ? i18n.translate('xpack.infra.waffle.customMetricPanelLabel.edit', { - defaultMessage: 'Edit custom metric', - }) - : i18n.translate('xpack.infra.waffle.customMetricPanelLabel.add', { - defaultMessage: 'Add custom metric', - }); + const title = metric + ? i18n.translate('xpack.infra.waffle.customMetricPanelLabel.edit', { + defaultMessage: 'Edit custom metric', + }) + : i18n.translate('xpack.infra.waffle.customMetricPanelLabel.add', { + defaultMessage: 'Add custom metric', + }); - const titleAriaLabel = metric - ? i18n.translate('xpack.infra.waffle.customMetricPanelLabel.editAriaLabel', { - defaultMessage: 'Back to custom metrics edit mode', - }) - : i18n.translate('xpack.infra.waffle.customMetricPanelLabel.addAriaLabel', { - defaultMessage: 'Back to metric picker', - }); + const titleAriaLabel = metric + ? i18n.translate('xpack.infra.waffle.customMetricPanelLabel.editAriaLabel', { + defaultMessage: 'Back to custom metrics edit mode', + }) + : i18n.translate('xpack.infra.waffle.customMetricPanelLabel.addAriaLabel', { + defaultMessage: 'Back to metric picker', + }); - return ( -
- - - - {title} - - -
+ + + - - - - - - - - of - - - - - - - - + +
+ + + + + + + + + {i18n.translate('xpack.infra.waffle.customMetrics.ofLabel', { + defaultMessage: 'of', + })} + + + + + + + + + + - - -
-
- - - - - - -
-
-
- ); - } -); + onChange={handleLabelChange} + /> + +
+
+ + + + + + +
+ + + ); +}); diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/index.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/index.tsx index cab778feda4df..48ddf2c1d8305 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/index.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/metric_control/index.tsx @@ -21,19 +21,16 @@ import { ModeSwitcher } from './mode_switcher'; import { MetricsEditMode } from './metrics_edit_mode'; import { CustomMetricMode } from './types'; import { DropdownButton } from '../../dropdown_button'; -import { DerivedIndexPattern } from '../../../../../../containers/metrics_source'; interface Props { options: Array<{ text: string; value: string }>; metric: SnapshotMetricInput; - fields: DerivedIndexPattern['fields']; onChange: (metric: SnapshotMetricInput) => void; onChangeCustomMetrics: (metrics: SnapshotCustomMetricInput[]) => void; customMetrics: SnapshotCustomMetricInput[]; } export const WaffleMetricControls = ({ - fields, onChange, onChangeCustomMetrics, metric, @@ -45,6 +42,7 @@ export const WaffleMetricControls = ({ const [editModeCustomMetrics, setEditModeCustomMetrics] = useState( [] ); + const [editCustomMetric, setEditCustomMetric] = useState(); const handleClose = useCallback(() => { setPopoverState(false); @@ -164,7 +162,6 @@ export const WaffleMetricControls = ({ ) : null} {mode === 'addMetric' ? ( ; nodeType: InventoryItemType; groupBy: SnapshotGroupBy; onChange: (groupBy: SnapshotGroupBy) => void; onChangeCustomOptions: (options: InfraGroupByOptions[]) => void; - fields: DerivedIndexPattern['fields']; customOptions: InfraGroupByOptions[]; } -const initialState = { - isPopoverOpen: false, -}; - -type State = Readonly; +export const WaffleGroupByControls = ({ + options, + nodeType, + groupBy, + onChange, + onChangeCustomOptions, + customOptions, +}: Props) => { + const [isPopoverOpen, { toggle: togglePopover, off: closePopover }] = useBoolean(false); -export class WaffleGroupByControls extends React.PureComponent { - public static displayName = 'WaffleGroupByControls'; - public readonly state: State = initialState; - - public render() { - const { nodeType, groupBy } = this.props; - const customOptions = this.props.customOptions.map((option) => ({ + const combinedOptions = [ + ...options, + ...customOptions.map((option) => ({ ...option, toolTipContent: option.text, - })); - const options = this.props.options.concat(customOptions); + })), + ]; - if (!options.length) { - throw Error( - i18n.translate('xpack.infra.waffle.unableToSelectGroupErrorMessage', { - defaultMessage: 'Unable to select group by options for {nodeType}', - values: { - nodeType, - }, - }) - ); - } - const isMaxGroupingsSelected = groupBy.length >= 2; - const maxGroupByTooltip = i18n.translate('xpack.infra.waffle.maxGroupByTooltip', { - defaultMessage: 'Only two groupings can be selected at a time', - }); - const panels: EuiContextMenuPanelDescriptor[] = [ - { - id: 'firstPanel', - title: i18n.translate('xpack.infra.waffle.selectTwoGroupingsTitle', { - defaultMessage: 'Select up to two groupings', - }), - items: [ - { - name: i18n.translate('xpack.infra.waffle.customGroupByOptionName', { - defaultMessage: 'Custom field', - }), - disabled: isMaxGroupingsSelected, - toolTipContent: isMaxGroupingsSelected ? maxGroupByTooltip : null, - icon: 'empty', - panel: 'customPanel', - }, - ...options.map((o) => { - const icon = groupBy.some((g) => g.field === o.field) ? 'check' : 'empty'; - const panel = { - name: o.text, - onClick: this.handleClick(o.field), - icon, - } as EuiContextMenuPanelItemDescriptor; - if (o.toolTipContent) { - panel.toolTipContent = o.toolTipContent; - } - if (isMaxGroupingsSelected && icon === 'empty') { - panel.toolTipContent = maxGroupByTooltip; - panel.disabled = true; - } - return panel; - }), - ], - }, - { - id: 'customPanel', - title: i18n.translate('xpack.infra.waffle.customGroupByPanelTitle', { - defaultMessage: 'Group By Custom Field', - }), - width: 685, - content: ( - - ), - }, - ]; - const buttonBody = - groupBy.length > 0 ? ( - groupBy - .map((g) => options.find((o) => o.field === g.field)) - .filter((o) => o != null) - // In this map the `o && o.field` is totally unnecessary but Typescript is - // too stupid to realize that the filter above prevents the next map from being null - .map((o) => ( - - {o && o.text} - - )) - ) : ( - - ); - - const button = ( - - {buttonBody} - - ); - - return ( - - - + if (!combinedOptions.length) { + throw Error( + i18n.translate('xpack.infra.waffle.unableToSelectGroupErrorMessage', { + defaultMessage: 'Unable to select group by options for {nodeType}', + values: { + nodeType, + }, + }) ); } - private handleRemove = (field: string) => () => { - const { groupBy } = this.props; - this.props.onChange(groupBy.filter((g) => g.field !== field)); - const options = this.props.customOptions.filter((g) => g.field !== field); - this.props.onChangeCustomOptions(options); + const handleRemove = (field: string) => { + onChange(groupBy.filter((g) => g.field !== field)); + onChangeCustomOptions(customOptions.filter((g) => g.field !== field)); // We need to close the panel after we rmeove the pill icon otherwise // it will remain open because the click is still captured by the EuiFilterButton - setTimeout(() => this.handleClose()); - }; - - private handleClose = () => { - this.setState({ isPopoverOpen: false }); + setTimeout(() => closePopover()); }; - private handleToggle = () => { - this.setState((state) => ({ isPopoverOpen: !state.isPopoverOpen })); - }; - - private handleCustomField = (field: string) => { - const options = [ - ...this.props.customOptions, + const handleCustomField = (field: string) => { + onChangeCustomOptions([ + ...customOptions, { text: field, field, }, - ]; - this.props.onChangeCustomOptions(options); - const fn = this.handleClick(field); + ]); + const fn = handleClick(field); fn(); }; - private handleClick = (field: string) => () => { - const { groupBy } = this.props; + const handleClick = (field: string) => () => { if (groupBy.some((g) => g.field === field)) { - this.handleRemove(field)(); - } else if (this.props.groupBy.length < 2) { - this.props.onChange([...groupBy, { field }]); + handleRemove(field); + } else if (groupBy.length < 2) { + onChange([...groupBy, { field }]); } - this.handleClose(); + closePopover(); }; -} -const StyledContextMenu = euiStyled(EuiContextMenu)` - width: 320px; - & .euiContextMenuItem__text { - overflow: hidden; - text-overflow: ellipsis; - } -`; + const isMaxGroupingsSelected = groupBy.length >= 2; + + const panels: EuiContextMenuPanelDescriptor[] = [ + { + id: 'firstPanel', + title: i18n.translate('xpack.infra.waffle.selectTwoGroupingsTitle', { + defaultMessage: 'Select up to two groupings', + }), + items: [ + { + name: i18n.translate('xpack.infra.waffle.customGroupByOptionName', { + defaultMessage: 'Custom field', + }), + disabled: isMaxGroupingsSelected, + toolTipContent: isMaxGroupingsSelected ? maxGroupByTooltip : null, + icon: 'empty', + panel: 'customPanel', + }, + ...combinedOptions.map((o) => { + const icon = groupBy.some((g) => g.field === o.field) ? 'check' : 'empty'; + const panel = { + name: o.text, + onClick: handleClick(o.field), + icon, + } as EuiContextMenuPanelItemDescriptor; + if (o.toolTipContent) { + panel.toolTipContent = o.toolTipContent; + } + if (isMaxGroupingsSelected && icon === 'empty') { + panel.toolTipContent = maxGroupByTooltip; + panel.disabled = true; + } + return panel; + }), + ], + }, + { + id: 'customPanel', + title: i18n.translate('xpack.infra.waffle.customGroupByPanelTitle', { + defaultMessage: 'Group By Custom Field', + }), + width: 685, + content: , + }, + ]; + const buttonBody = + groupBy.length > 0 ? ( + groupBy + .map((g) => combinedOptions.find((o) => o.field === g.field)) + .filter((o) => o != null) + // In this map the `o && o.field` is totally unnecessary but Typescript is + // too stupid to realize that the filter above prevents the next map from being null + .map((o) => ( + + {o && o.text} + + )) + ) : ( + + ); + + const button = ( + + {buttonBody} + + ); + + return ( + + + + ); +}; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/hooks/use_waffle_filters.test.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/hooks/use_waffle_filters.test.ts index cc1108cb91e6d..87aaad06abc96 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/hooks/use_waffle_filters.test.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/hooks/use_waffle_filters.test.ts @@ -6,8 +6,10 @@ */ import { renderHook, act } from '@testing-library/react-hooks'; - +import { DataView } from '@kbn/data-views-plugin/common'; import { useWaffleFilters, WaffleFiltersState } from './use_waffle_filters'; +import { TIMESTAMP_FIELD } from '../../../../../common/constants'; +import { ResolvedDataView } from '../../../../utils/data_view'; // Mock useUrlState hook jest.mock('react-router-dom', () => ({ @@ -17,9 +19,25 @@ jest.mock('react-router-dom', () => ({ }), })); +const mockDataView = { + id: 'mock-id', + title: 'mock-title', + timeFieldName: TIMESTAMP_FIELD, + isPersisted: () => false, + getName: () => 'mock-data-view', + toSpec: () => ({}), +} as jest.Mocked; + jest.mock('../../../../containers/metrics_source', () => ({ - useSourceContext: () => ({ - createDerivedIndexPattern: () => 'jestbeat-*', + useMetricsDataViewContext: () => ({ + metricsView: { + indices: 'jestbeat-*', + timeFieldName: mockDataView.timeFieldName, + fields: mockDataView.fields, + dataViewReference: mockDataView, + } as ResolvedDataView, + loading: false, + error: undefined, }), })); diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/hooks/use_waffle_filters.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/hooks/use_waffle_filters.ts index 86f81333e338e..658fb92c468e0 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/hooks/use_waffle_filters.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/hooks/use_waffle_filters.ts @@ -18,7 +18,7 @@ import { } from '../../../../../common/inventory_views'; import { useAlertPrefillContext } from '../../../../alerting/use_alert_prefill'; import { useUrlState } from '../../../../utils/use_url_state'; -import { useSourceContext } from '../../../../containers/metrics_source'; +import { useMetricsDataViewContext } from '../../../../containers/metrics_source'; import { convertKueryToElasticSearchQuery } from '../../../../utils/kuery'; const validateKuery = (expression: string) => { @@ -36,8 +36,7 @@ export const DEFAULT_WAFFLE_FILTERS_STATE: InventoryFiltersState = { }; export const useWaffleFilters = () => { - const { createDerivedIndexPattern } = useSourceContext(); - const indexPattern = createDerivedIndexPattern(); + const { metricsView } = useMetricsDataViewContext(); const [urlState, setUrlState] = useUrlState({ defaultState: DEFAULT_WAFFLE_FILTERS_STATE, @@ -53,8 +52,8 @@ export const useWaffleFilters = () => { const [filterQueryDraft, setFilterQueryDraft] = useState(urlState.expression); const filterQueryAsJson = useMemo( - () => convertKueryToElasticSearchQuery(urlState.expression, indexPattern), - [indexPattern, urlState.expression] + () => convertKueryToElasticSearchQuery(urlState.expression, metricsView?.dataViewReference), + [metricsView?.dataViewReference, urlState.expression] ); const applyFilterQueryFromKueryExpression = useCallback( diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/index.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/index.tsx index 3142a82d5e9d2..818a71216c272 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/index.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/index.tsx @@ -11,9 +11,6 @@ import { useTrackPageview } from '@kbn/observability-shared-plugin/public'; import { APP_WRAPPER_CLASS } from '@kbn/core/public'; import { css } from '@emotion/react'; import { FilterBar } from './components/filter_bar'; -import { SourceErrorPage } from '../../../components/source_error_page'; -import { SourceLoadingPage } from '../../../components/source_loading_page'; -import { useSourceContext } from '../../../containers/metrics_source'; import { useMetricsBreadcrumbs } from '../../../hooks/use_metrics_breadcrumbs'; import { LayoutView } from './components/layout_view'; import { MetricsPageTemplate } from '../page_template'; @@ -22,14 +19,11 @@ import { SavedViews } from './components/saved_views'; import { SnapshotContainer } from './components/snapshot_container'; import { fullHeightContentStyles } from '../../../page_template.styles'; import { SurveySection } from './components/survey_section'; -import { NoRemoteCluster } from '../../../components/empty_states'; import { WaffleOptionsProvider } from './hooks/use_waffle_options'; import { WaffleTimeProvider } from './hooks/use_waffle_time'; import { WaffleFiltersProvider } from './hooks/use_waffle_filters'; export const SnapshotPage = () => { - const { isLoading, loadSourceFailureMessage, loadSource, source } = useSourceContext(); - useTrackPageview({ app: 'infra_metrics', path: 'inventory' }); useTrackPageview({ app: 'infra_metrics', path: 'inventory', delay: 15000 }); @@ -39,23 +33,6 @@ export const SnapshotPage = () => { }, ]); - const { metricIndicesExist, remoteClustersExist } = source?.status ?? {}; - - if (isLoading && !source) return ; - - if (!remoteClustersExist) { - return ; - } - - if (!metricIndicesExist) { - return ( - - ); - } - - if (loadSourceFailureMessage) - return ; - return ( @@ -63,7 +40,6 @@ export const SnapshotPage = () => {
, ], diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metric_detail/asset_detail_page.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metric_detail/asset_detail_page.tsx index 31cbe1baae31b..74bf51277c446 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metric_detail/asset_detail_page.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metric_detail/asset_detail_page.tsx @@ -8,37 +8,14 @@ import React from 'react'; import { useRouteMatch } from 'react-router-dom'; import type { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; -import { NoRemoteCluster } from '../../../components/empty_states'; -import { SourceErrorPage } from '../../../components/source_error_page'; -import { SourceLoadingPage } from '../../../components/source_loading_page'; -import { useSourceContext } from '../../../containers/metrics_source'; import { AssetDetails } from '../../../components/asset_details'; -import { MetricsPageTemplate } from '../page_template'; import { getAssetDetailsTabs } from '../../../common/asset_details_config/asset_details_tabs'; export const AssetDetailPage = () => { - const { isLoading, loadSourceFailureMessage, loadSource, source } = useSourceContext(); const { params: { type: nodeType, node: nodeId }, } = useRouteMatch<{ type: InventoryItemType; node: string }>(); - const { metricIndicesExist, remoteClustersExist } = source?.status ?? {}; - - if (isLoading || !source) return ; - - if (!remoteClustersExist) { - return ; - } - - if (!metricIndicesExist) { - return ( - - ); - } - - if (loadSourceFailureMessage) - return ; - return ( { renderMode={{ mode: 'page', }} - metricAlias={source.configuration.metricAlias} /> ); }; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metric_detail/components/node_details_page.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metric_detail/components/node_details_page.tsx index fdc274a6d06f7..940ff1f92f01d 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metric_detail/components/node_details_page.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metric_detail/components/node_details_page.tsx @@ -11,7 +11,6 @@ import moment from 'moment'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { InventoryMetric, InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; import { useTemplateHeaderBreadcrumbs } from '../../../../components/asset_details/hooks/use_page_header'; -import { useSourceContext } from '../../../../containers/metrics_source'; import { useNodeDetails } from '../hooks/use_node_details'; import { MetricsSideNav } from './side_nav'; import { MetricsTimeControls } from './time_controls'; @@ -54,7 +53,6 @@ const parseRange = (range: MetricsTimeInput) => { }; export const NodeDetailsPage = (props: Props) => { - const { metricIndicesExist } = useSourceContext(); const { breadcrumbs } = useTemplateHeaderBreadcrumbs(); const [parsedTimeRange, setParsedTimeRange] = useState(parseRange(props.timeRange)); const { metrics, loading, makeRequest, error } = useNodeDetails( @@ -84,7 +82,6 @@ export const NodeDetailsPage = (props: Props) => { return ( { params: { type: nodeType, node: nodeId }, } = useRouteMatch<{ type: InventoryItemType; node: string }>(); const inventoryModel = findInventoryModel(nodeType); - const { sourceId, metricIndicesExist } = useSourceContext(); + const { sourceId } = useSourceContext(); const parentBreadcrumbResolver = useParentBreadcrumbResolver(); const { @@ -79,7 +79,7 @@ export const MetricDetailPage = () => { if (metadataLoading && !filteredRequiredMetrics.length) { return ( - + void; } export const MetricsExplorerChart = ({ - source, options, chartOptions, series, @@ -119,7 +116,6 @@ export const MetricsExplorerChart = ({ chartOptions={chartOptions} series={series} onFilter={onFilter} - source={source} uiCapabilities={uiCapabilities} /> @@ -132,7 +128,6 @@ export const MetricsExplorerChart = ({ options={options} chartOptions={chartOptions} series={series} - source={source} timeRange={timeRange} uiCapabilities={uiCapabilities} /> diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.test.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.test.tsx index 5a3ed5e2b3268..6ff53e99fd7d2 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.test.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.test.tsx @@ -8,17 +8,26 @@ import React from 'react'; import { MetricsExplorerChartContextMenu, Props } from './chart_context_menu'; import { ReactWrapper, mount } from 'enzyme'; -import { - options, - source, - timeRange, - chartOptions, -} from '../../../../utils/fixtures/metrics_explorer'; +import { options, timeRange, chartOptions } from '../../../../utils/fixtures/metrics_explorer'; import { Capabilities } from '@kbn/core/public'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { coreMock } from '@kbn/core/public/mocks'; +import { MetricsDataViewProvider, SourceProvider } from '../../../../containers/metrics_source'; +import { TIMESTAMP_FIELD } from '../../../../../common/constants'; +import { DataView } from '@kbn/data-views-plugin/common'; +import { ResolvedDataView } from '../../../../utils/data_view'; const coreStartMock = coreMock.createStart(); + +const mockDataView = { + id: 'mock-id', + title: 'mock-title', + timeFieldName: TIMESTAMP_FIELD, + isPersisted: () => false, + getName: () => 'mock-data-view', + toSpec: () => ({}), +} as jest.Mocked; + const series = { id: 'exmaple-01', rows: [], columns: [] }; const uiCapabilities: Capabilities = { navLinks: { show: false }, @@ -28,6 +37,24 @@ const uiCapabilities: Capabilities = { infrastructure: { save: true }, }; +jest.mock('../../../../containers/metrics_source', () => ({ + SourceProvider: jest.fn(({ children }) => <>{children}), + MetricsDataViewProvider: jest.fn(({ children }) => <>{children}), + useSourceContext: () => ({ + source: { id: 'default' }, + }), + useMetricsDataViewContext: () => ({ + metricsView: { + indices: 'metricbeat-*', + timeFieldName: mockDataView.timeFieldName, + fields: mockDataView.fields, + dataViewReference: mockDataView, + } as ResolvedDataView, + loading: false, + error: undefined, + }), +})); + const getTestSubject = (component: ReactWrapper, name: string) => { return component.find(`[data-test-subj="${name}"]`).hostNodes(); }; @@ -35,7 +62,11 @@ const getTestSubject = (component: ReactWrapper, name: string) => { const mountComponentWithProviders = (props: Props): ReactWrapper => { return mount( - + + + + + ); }; @@ -55,7 +86,6 @@ describe('MetricsExplorerChartContextMenu', () => { const onFilter = jest.fn().mockImplementation((query: string) => void 0); const component = mountComponentWithProviders({ timeRange, - source, series, options, onFilter, @@ -73,7 +103,6 @@ describe('MetricsExplorerChartContextMenu', () => { const onFilter = jest.fn().mockImplementation((query: string) => void 0); const component = mountComponentWithProviders({ timeRange, - source, series, options: customOptions, onFilter, @@ -87,7 +116,6 @@ describe('MetricsExplorerChartContextMenu', () => { it('should not display "Add Filter" without onFilter', async () => { const component = mountComponentWithProviders({ timeRange, - source, series, options, uiCapabilities, @@ -102,7 +130,6 @@ describe('MetricsExplorerChartContextMenu', () => { const onFilter = jest.fn().mockImplementation((query: string) => void 0); const component = mountComponentWithProviders({ timeRange, - source, series, options: customOptions, onFilter, @@ -117,7 +144,6 @@ describe('MetricsExplorerChartContextMenu', () => { const customOptions = { ...options, metrics: [] }; const component = mountComponentWithProviders({ timeRange, - source, series, options: customOptions, uiCapabilities, @@ -134,7 +160,6 @@ describe('MetricsExplorerChartContextMenu', () => { const onFilter = jest.fn().mockImplementation((query: string) => void 0); const component = mountComponentWithProviders({ timeRange, - source, series, options, onFilter, @@ -152,7 +177,6 @@ describe('MetricsExplorerChartContextMenu', () => { const customOptions = { ...options, groupBy: void 0 }; const component = mountComponentWithProviders({ timeRange, - source, series, options: customOptions, onFilter, diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.tsx index 0243ccacf136a..2821428d9fa4b 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/chart_context_menu.tsx @@ -18,7 +18,7 @@ import DateMath from '@kbn/datemath'; import { Capabilities } from '@kbn/core/public'; import { useLinkProps } from '@kbn/observability-shared-plugin/public'; import { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; -import { MetricsSourceConfigurationProperties } from '../../../../../common/metrics_sources'; +import { useMetricsDataViewContext } from '../../../../containers/metrics_source'; import { AlertFlyout } from '../../../../alerting/metric_threshold/components/alert_flyout'; import { MetricsExplorerSeries } from '../../../../../common/http_api/metrics_explorer'; import { @@ -26,7 +26,7 @@ import { MetricsExplorerTimeOptions, MetricsExplorerChartOptions, } from '../hooks/use_metrics_explorer_options'; -import { createTSVBLink } from './helpers/create_tsvb_link'; +import { createTSVBLink, TSVB_WORKAROUND_INDEX_PATTERN } from './helpers/create_tsvb_link'; import { useNodeDetailsRedirect } from '../../../link_to'; import { HOST_FIELD, POD_FIELD, CONTAINER_FIELD } from '../../../../../common/constants'; @@ -34,16 +34,12 @@ export interface Props { options: MetricsExplorerOptions; onFilter?: (query: string) => void; series: MetricsExplorerSeries; - source?: MetricsSourceConfigurationProperties; timeRange: MetricsExplorerTimeOptions; uiCapabilities?: Capabilities; chartOptions: MetricsExplorerChartOptions; } -const fieldToNodeType = ( - source: MetricsSourceConfigurationProperties, - groupBy: string | string[] -): InventoryItemType | undefined => { +const fieldToNodeType = (groupBy: string | string[]): InventoryItemType | undefined => { const fields = Array.isArray(groupBy) ? groupBy : [groupBy]; if (fields.includes(HOST_FIELD)) { return 'host'; @@ -66,7 +62,6 @@ export const MetricsExplorerChartContextMenu: React.FC = ({ onFilter, options, series, - source, timeRange, uiCapabilities, chartOptions, @@ -74,6 +69,7 @@ export const MetricsExplorerChartContextMenu: React.FC = ({ const { getNodeDetailUrl } = useNodeDetailsRedirect(); const [isPopoverOpen, setPopoverState] = useState(false); const [flyoutVisible, setFlyoutVisible] = useState(false); + const { metricsView } = useMetricsDataViewContext(); const supportFiltering = options.groupBy != null && onFilter != null; const handleFilter = useCallback(() => { // onFilter needs check for Typescript even though it's @@ -104,7 +100,7 @@ export const MetricsExplorerChartContextMenu: React.FC = ({ ] : []; - const nodeType = source && options.groupBy && fieldToNodeType(source, options.groupBy); + const nodeType = options.groupBy && fieldToNodeType(options.groupBy); const nodeDetailLinkProps = nodeType ? getNodeDetailUrl({ @@ -117,7 +113,13 @@ export const MetricsExplorerChartContextMenu: React.FC = ({ }) : {}; const tsvbLinkProps = useLinkProps({ - ...createTSVBLink(source, options, series, timeRange, chartOptions), + ...createTSVBLink( + metricsView?.indices ?? TSVB_WORKAROUND_INDEX_PATTERN, + options, + series, + timeRange, + chartOptions + ), }); const viewNodeDetail = nodeType ? [ diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/charts.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/charts.tsx index 6a6728af98629..12ddb26164174 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/charts.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/charts.tsx @@ -10,7 +10,6 @@ import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import React from 'react'; import { first, last, sumBy } from 'lodash'; -import { MetricsSourceConfigurationProperties } from '../../../../../common/metrics_sources'; import { MetricsExplorerResponse } from '../../../../../common/http_api/metrics_explorer'; import { MetricsExplorerOptions, @@ -32,7 +31,6 @@ interface Props { data?: { pages: MetricsExplorerResponse[]; }; - source: MetricsSourceConfigurationProperties | undefined; timeRange: MetricsExplorerTimeOptions; } export const MetricsExplorerCharts = ({ @@ -42,16 +40,14 @@ export const MetricsExplorerCharts = ({ options, chartOptions, onRefetch, - onFilter, - source, timeRange, onTimeChange, }: Props) => { if (isLoading) { return ( 1 ? 200 : 400} series={series} - source={source} timeRange={timeRange} onTimeChange={onTimeChange} /> diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/group_by.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/group_by.tsx index ce7c9926d2b40..5cc1ad8ec467c 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/group_by.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/group_by.tsx @@ -7,19 +7,18 @@ import { EuiComboBox } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; - import React, { useCallback } from 'react'; +import { useMetricsDataViewContext } from '../../../../containers/metrics_source'; import { MetricsExplorerOptions } from '../hooks/use_metrics_explorer_options'; -import { DerivedIndexPattern } from '../../../../containers/metrics_source'; interface Props { options: MetricsExplorerOptions; onChange: (groupBy: string | null | string[]) => void; - fields: DerivedIndexPattern['fields']; errorOptions?: string[]; } -export const MetricsExplorerGroupBy = ({ options, onChange, fields, errorOptions }: Props) => { +export const MetricsExplorerGroupBy = ({ options, onChange, errorOptions }: Props) => { + const { metricsView } = useMetricsDataViewContext(); const handleChange = useCallback( (selectedOptions: Array<{ label: string }>) => { const groupBy = selectedOptions.map((option) => option.label); @@ -42,6 +41,10 @@ export const MetricsExplorerGroupBy = ({ options, onChange, fields, errorOptions ] : []; + const comboOptions = (metricsView?.fields ?? []) + .filter((f) => f.aggregatable && f.type === 'string') + .map((f) => ({ label: f.name })); + return ( f.aggregatable && f.type === 'string') - .map((f) => ({ label: f.name }))} + options={comboOptions} onChange={handleChange} isClearable={true} /> diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.test.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.test.ts index ec41d0ff770d1..4c29f8921947d 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.test.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.test.ts @@ -6,26 +6,23 @@ */ import { createTSVBLink, createFilterFromOptions } from './create_tsvb_link'; -import { - source, - options, - timeRange, - chartOptions, -} from '../../../../../utils/fixtures/metrics_explorer'; +import { options, timeRange, chartOptions } from '../../../../../utils/fixtures/metrics_explorer'; import { MetricsExplorerYAxisMode, MetricsExplorerChartType, } from '../../hooks/use_metrics_explorer_options'; import { MetricsExplorerOptions } from '../../hooks/use_metrics_explorer_options'; + jest.mock('uuid', () => ({ v4: jest.fn().mockReturnValue('test-id'), })); +const indexPattern = 'metricbeat-*'; const series = { id: 'example-01', rows: [], columns: [] }; describe('createTSVBLink()', () => { it('should just work', () => { - const link = createTSVBLink(source, options, series, timeRange, chartOptions); + const link = createTSVBLink(indexPattern, options, series, timeRange, chartOptions); expect(link).toStrictEqual({ app: 'visualize', hash: '/create', @@ -42,7 +39,7 @@ describe('createTSVBLink()', () => { ...options, metrics: [{ aggregation: 'rate', field: 'host.network.egress.bytes' }], }; - const link = createTSVBLink(source, customOptions, series, timeRange, chartOptions); + const link = createTSVBLink(indexPattern, customOptions, series, timeRange, chartOptions); expect(link).toStrictEqual({ app: 'visualize', hash: '/create', @@ -55,7 +52,7 @@ describe('createTSVBLink()', () => { }); it('should work with time range', () => { const customTimeRange = { ...timeRange, from: 'now-10m', to: 'now' }; - const link = createTSVBLink(source, options, series, customTimeRange, chartOptions); + const link = createTSVBLink(indexPattern, options, series, customTimeRange, chartOptions); expect(link).toStrictEqual({ app: 'visualize', hash: '/create', @@ -66,31 +63,10 @@ describe('createTSVBLink()', () => { }, }); }); - it('should work with source', () => { - const customSource = { - ...source, - metricAlias: 'my-beats-*', - fields: { ...source.fields, timestamp: 'time' }, - }; - const link = createTSVBLink(customSource, options, series, timeRange, chartOptions); - expect(link).toStrictEqual({ - app: 'visualize', - hash: '/create', - search: { - _a: "(filters:!(),linked:!f,query:(language:kuery,query:''),uiState:(),vis:(aggs:!(),params:(axis_formatter:number,axis_min:0,axis_position:left,axis_scale:normal,default_index_pattern:'my-beats-*',filter:(language:kuery,query:'host.name : \"example-01\"'),id:test-id,index_pattern:'my-beats-*',interval:auto,series:!((axis_position:right,chart_type:line,color:#6092C0,fill:0,formatter:percent,id:test-id,label:'avg(system.cpu.user.pct)',line_width:2,metrics:!((field:system.cpu.user.pct,id:test-id,type:avg)),point_size:0,separate_axis:0,split_mode:everything,stacked:none,value_template:{{value}})),show_grid:1,show_legend:1,time_field:'@timestamp',type:timeseries),title:example-01,type:metrics))", - _g: '(refreshInterval:(pause:!t,value:0),time:(from:now-1h,to:now))', - type: 'metrics', - }, - }); - }); + it('should work with filterQuery', () => { - const customSource = { - ...source, - metricAlias: 'my-beats-*', - fields: { ...source.fields, timestamp: 'time' }, - }; const customOptions = { ...options, filterQuery: 'system.network.name:lo*' }; - const link = createTSVBLink(customSource, customOptions, series, timeRange, chartOptions); + const link = createTSVBLink('my-beats-*', customOptions, series, timeRange, chartOptions); expect(link).toStrictEqual({ app: 'visualize', hash: '/create', @@ -104,7 +80,7 @@ describe('createTSVBLink()', () => { it('should remove axis_min from link', () => { const customChartOptions = { ...chartOptions, yAxisMode: MetricsExplorerYAxisMode.auto }; - const link = createTSVBLink(source, options, series, timeRange, customChartOptions); + const link = createTSVBLink(indexPattern, options, series, timeRange, customChartOptions); expect(link).toStrictEqual({ app: 'visualize', hash: '/create', @@ -118,7 +94,7 @@ describe('createTSVBLink()', () => { it('should change series to area', () => { const customChartOptions = { ...chartOptions, type: MetricsExplorerChartType.area }; - const link = createTSVBLink(source, options, series, timeRange, customChartOptions); + const link = createTSVBLink(indexPattern, options, series, timeRange, customChartOptions); expect(link).toStrictEqual({ app: 'visualize', hash: '/create', @@ -136,7 +112,7 @@ describe('createTSVBLink()', () => { type: MetricsExplorerChartType.area, stack: true, }; - const link = createTSVBLink(source, options, series, timeRange, customChartOptions); + const link = createTSVBLink(indexPattern, options, series, timeRange, customChartOptions); expect(link).toStrictEqual({ app: 'visualize', hash: '/create', @@ -149,12 +125,7 @@ describe('createTSVBLink()', () => { }); it('should use the workaround index pattern when there are multiple listed in the source', () => { - const customSource = { - ...source, - metricAlias: 'my-beats-*,metrics-*', - fields: { ...source.fields, timestamp: 'time' }, - }; - const link = createTSVBLink(customSource, options, series, timeRange, chartOptions); + const link = createTSVBLink('my-beats-*,metrics-*', options, series, timeRange, chartOptions); expect(link).toStrictEqual({ app: 'visualize', hash: '/create', diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.ts index 2725dc46d5cea..3fe9dfc8c5ba6 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/helpers/create_tsvb_link.ts @@ -10,7 +10,6 @@ import { v4 as uuidv4 } from 'uuid'; import { set } from '@kbn/safer-lodash-set'; import { LinkDescriptor } from '@kbn/observability-shared-plugin/public'; import { TIMESTAMP_FIELD } from '../../../../../../common/constants'; -import { MetricsSourceConfigurationProperties } from '../../../../../../common/metrics_sources'; import { colorTransformer, Color } from '../../../../../../common/color_palette'; import { MetricsExplorerSeries } from '../../../../../../common/http_api/metrics_explorer'; import { @@ -31,7 +30,7 @@ import { createMetricLabel } from './create_metric_label'; the field dropdowns are not populated correctly. This index pattern is a temporary fix. See: https://github.com/elastic/kibana/issues/73987 */ -const TSVB_WORKAROUND_INDEX_PATTERN = 'metric*'; +export const TSVB_WORKAROUND_INDEX_PATTERN = 'metric*'; export const metricsExplorerMetricToTSVBMetric = (metric: MetricsExplorerOptionsMetric) => { if (metric.aggregation === 'rate') { @@ -143,15 +142,13 @@ const createTSVBIndexPattern = (alias: string) => { }; export const createTSVBLink = ( - source: MetricsSourceConfigurationProperties | undefined, + indexPattern: string, options: MetricsExplorerOptions, series: MetricsExplorerSeries, timeRange: MetricsExplorerTimeOptions, chartOptions: MetricsExplorerChartOptions ): LinkDescriptor => { - const tsvbIndexPattern = createTSVBIndexPattern( - (source && source.metricAlias) || TSVB_WORKAROUND_INDEX_PATTERN - ); + const tsvbIndexPattern = createTSVBIndexPattern(indexPattern); const appState = { filters: [], linked: false, diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/kuery_bar.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/kuery_bar.tsx index ef2ca1e842ed4..b6918ab140df1 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/kuery_bar.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/kuery_bar.tsx @@ -8,8 +8,8 @@ import { i18n } from '@kbn/i18n'; import { fromKueryExpression } from '@kbn/es-query'; import React, { useEffect, useState } from 'react'; -import { DataViewBase } from '@kbn/es-query'; import { QuerySuggestion } from '@kbn/unified-search-plugin/public'; +import { useMetricsDataViewContext } from '../../../../containers/metrics_source'; import { WithKueryAutocompletion } from '../../../../containers/with_kuery_autocompletion'; import { AutocompleteField } from '../../../../components/autocomplete_field'; @@ -22,7 +22,6 @@ type LoadSuggestionsFn = ( export type CurryLoadSuggestionsType = (loadSuggestions: LoadSuggestionsFn) => LoadSuggestionsFn; interface Props { - derivedIndexPattern: DataViewBase; onSubmit: (query: string) => void; onChange?: (query: string) => void; value?: string | null; @@ -41,7 +40,6 @@ function validateQuery(query: string) { } export const MetricsExplorerKueryBar = ({ - derivedIndexPattern, onSubmit, onChange, value, @@ -49,6 +47,7 @@ export const MetricsExplorerKueryBar = ({ curryLoadSuggestions = defaultCurryLoadSuggestions, compressed, }: Props) => { + const { metricsView } = useMetricsDataViewContext(); const [draftQuery, setDraftQuery] = useState(value || ''); const [isValid, setValidation] = useState(true); @@ -67,11 +66,6 @@ export const MetricsExplorerKueryBar = ({ } }; - const filteredDerivedIndexPattern = { - ...derivedIndexPattern, - fields: derivedIndexPattern.fields, - }; - const defaultPlaceholder = i18n.translate( 'xpack.infra.homePage.toolbar.kqlSearchFieldPlaceholder', { @@ -80,7 +74,7 @@ export const MetricsExplorerKueryBar = ({ ); return ( - + {({ isLoadingSuggestions, loadSuggestions, suggestions }) => ( void; - fields: DerivedIndexPattern['fields']; } interface SelectedOption { @@ -26,7 +24,8 @@ interface SelectedOption { label: string; } -export const MetricsExplorerMetrics = ({ options, onChange, fields, autoFocus = false }: Props) => { +export const MetricsExplorerMetrics = ({ options, onChange, autoFocus = false }: Props) => { + const { metricsView } = useMetricsDataViewContext(); const colors = Object.keys(Color) as Array; const [shouldFocus, setShouldFocus] = useState(autoFocus); @@ -54,7 +53,10 @@ export const MetricsExplorerMetrics = ({ options, onChange, fields, autoFocus = [onChange, options.aggregation, colors] ); - const comboOptions = fields.map((field) => ({ label: field.name, value: field.name })); + const comboOptions = (metricsView?.fields ?? []).map((field) => ({ + label: field.name, + value: field.name, + })); const selectedOptions = options.metrics .filter((m) => m.aggregation !== 'count') .map((metric) => ({ diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/toolbar.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/toolbar.tsx index 6c8b32fc83d8a..dd866e72cbc3e 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/toolbar.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/components/toolbar.tsx @@ -25,10 +25,8 @@ import { MetricsExplorerAggregationPicker } from './aggregation'; import { MetricsExplorerChartOptions as MetricsExplorerChartOptionsComponent } from './chart_options'; import { useKibanaUiSetting } from '../../../../utils/use_kibana_ui_setting'; import { mapKibanaQuickRangesToDatePickerRanges } from '../../../../utils/map_timepicker_quickranges_to_datepicker_ranges'; -import { DerivedIndexPattern } from '../../../../containers/metrics_source'; interface Props { - derivedIndexPattern: DerivedIndexPattern; timeRange: MetricsExplorerTimeOptions; options: MetricsExplorerOptions; chartOptions: MetricsExplorerChartOptions; @@ -43,7 +41,6 @@ interface Props { export const MetricsExplorerToolbar = ({ timeRange, - derivedIndexPattern, options, onTimeChange, onRefresh, @@ -81,7 +78,6 @@ export const MetricsExplorerToolbar = ({ @@ -94,22 +90,14 @@ export const MetricsExplorerToolbar = ({ /> - + - + ({ useKibanaTimefilterTime: (defaults: { from: string; to: string }) => [() => defaults], @@ -30,8 +25,7 @@ jest.mock('../../../../alerting/use_alert_prefill', () => ({ })); const renderUseMetricsExplorerStateHook = () => - renderHook((props) => useMetricsExplorerState(props.source, props.derivedIndexPattern), { - initialProps: { source, derivedIndexPattern }, + renderHook(() => useMetricsExplorerState(), { wrapper: ({ children }) => ( {children} ), diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.ts index 5c498708f94f6..0bcb182879d1f 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.ts @@ -7,7 +7,6 @@ import DateMath from '@kbn/datemath'; import { useCallback, useEffect } from 'react'; -import { DataViewBase } from '@kbn/es-query'; import type { MetricsExplorerChartOptions, MetricsExplorerOptions, @@ -15,7 +14,6 @@ import type { MetricsExplorerView, MetricsExplorerViewState, } from '../../../../../common/metrics_explorer_views'; -import { MetricsSourceConfigurationProperties } from '../../../../../common/metrics_sources'; import { MetricsExplorerMetric, MetricsExplorerAggregation, @@ -25,11 +23,7 @@ import { useMetricsExplorerOptionsContainerContext } from './use_metrics_explore export type { MetricsExplorerViewState }; -export const useMetricsExplorerState = ( - source: MetricsSourceConfigurationProperties, - derivedIndexPattern: DataViewBase, - enabled = true -) => { +export const useMetricsExplorerState = ({ enabled }: { enabled: boolean } = { enabled: true }) => { const { defaultViewState, options, @@ -53,13 +47,11 @@ export const useMetricsExplorerState = ( }); }, [setTimestamps, timeRange]); - const { data, error, fetchNextPage, isLoading } = useMetricsExplorerData( + const { data, error, fetchNextPage, isLoading } = useMetricsExplorerData({ options, - source, - derivedIndexPattern, timestamps, - enabled - ); + enabled, + }); useEffect(() => { refreshTimestamps(); diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.test.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.test.tsx index 27647088c9a53..202ae51990ad2 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.test.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.test.tsx @@ -8,7 +8,7 @@ import React, { FC, PropsWithChildren } from 'react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { useMetricsExplorerData } from './use_metrics_explorer_data'; - +import { DataView } from '@kbn/data-views-plugin/common'; import { renderHook } from '@testing-library/react-hooks'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; @@ -23,6 +23,8 @@ import { import { MetricsExplorerOptions, MetricsExplorerTimestamp } from './use_metrics_explorer_options'; import { DataViewBase } from '@kbn/es-query'; import { MetricsSourceConfigurationProperties } from '../../../../../common/metrics_sources'; +import { TIMESTAMP_FIELD } from '../../../../../common/constants'; +import { ResolvedDataView } from '../../../../utils/data_view'; const mockedFetch = jest.fn(); @@ -35,6 +37,28 @@ const queryClient = new QueryClient({ }, }); +const mockDataView = { + id: 'mock-id', + title: 'mock-title', + timeFieldName: TIMESTAMP_FIELD, + isPersisted: () => false, + getName: () => 'mock-data-view', + toSpec: () => ({}), +} as jest.Mocked; + +jest.mock('../../../../containers/metrics_source', () => ({ + useMetricsDataViewContext: () => ({ + metricsView: { + indices: 'metricbeat-*', + timeFieldName: mockDataView.timeFieldName, + fields: mockDataView.fields, + dataViewReference: mockDataView, + } as ResolvedDataView, + loading: false, + error: undefined, + }), +})); + const renderUseMetricsExplorerDataHook = () => { const wrapper: FC> = ({ children }) => { const services = { @@ -55,12 +79,10 @@ const renderUseMetricsExplorerDataHook = () => { derivedIndexPattern: DataViewBase; timestamps: MetricsExplorerTimestamp; }) => - useMetricsExplorerData( - props.options, - props.source, - props.derivedIndexPattern, - props.timestamps - ), + useMetricsExplorerData({ + options: props.options, + timestamps: props.timestamps, + }), { initialProps: { options, diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.ts b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.ts index 28377c23da936..39c219101aeb2 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.ts +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/hooks/use_metrics_explorer_data.ts @@ -5,11 +5,9 @@ * 2.0. */ -import { DataViewBase } from '@kbn/es-query'; import { useInfiniteQuery } from '@tanstack/react-query'; - import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { MetricsSourceConfigurationProperties } from '../../../../../common/metrics_sources'; +import { useMetricsDataViewContext } from '../../../../containers/metrics_source'; import { MetricsExplorerResponse, metricsExplorerResponseRT, @@ -18,14 +16,17 @@ import { convertKueryToElasticSearchQuery } from '../../../../utils/kuery'; import { MetricsExplorerOptions, MetricsExplorerTimestamp } from './use_metrics_explorer_options'; import { decodeOrThrow } from '../../../../../common/runtime_types'; -export function useMetricsExplorerData( - options: MetricsExplorerOptions, - source: MetricsSourceConfigurationProperties | undefined, - derivedIndexPattern: DataViewBase, - { fromTimestamp, toTimestamp, interval }: MetricsExplorerTimestamp, - enabled = true -) { +export function useMetricsExplorerData({ + options, + timestamps: { fromTimestamp, toTimestamp, interval }, + enabled = true, +}: { + options: MetricsExplorerOptions; + timestamps: MetricsExplorerTimestamp; + enabled?: boolean; +}) { const { http } = useKibana().services; + const { metricsView } = useMetricsDataViewContext(); const { isLoading, data, error, refetch, fetchNextPage } = useInfiniteQuery< MetricsExplorerResponse, @@ -39,8 +40,8 @@ export function useMetricsExplorerData( if (!http) { throw new Error('HTTP service is unavailable'); } - if (!source) { - throw new Error('Source is unavailable'); + if (!metricsView?.dataViewReference) { + throw new Error('DataView is unavailable'); } const { afterKey } = pageParam; @@ -54,10 +55,13 @@ export function useMetricsExplorerData( groupInstance: options.groupInstance, afterKey, limit: options.limit, - indexPattern: source.metricAlias, + indexPattern: metricsView.indices, filterQuery: (options.filterQuery && - convertKueryToElasticSearchQuery(options.filterQuery, derivedIndexPattern)) || + convertKueryToElasticSearchQuery( + options.filterQuery, + metricsView.dataViewReference + )) || void 0, timerange: { interval, @@ -71,7 +75,7 @@ export function useMetricsExplorerData( return decodeOrThrow(metricsExplorerResponseRT)(response); }, getNextPageParam: (lastPage) => lastPage.pageInfo, - enabled: enabled && !!fromTimestamp && !!toTimestamp && !!http && !!source, + enabled: enabled && !!fromTimestamp && !!toTimestamp && !!http && !!metricsView, refetchOnWindowFocus: false, }); diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/index.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/index.tsx index b1cea81cec052..887b6be224a45 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/index.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/metrics_explorer/index.tsx @@ -5,33 +5,43 @@ * 2.0. */ -import { EuiErrorBoundary } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React, { useEffect, useState } from 'react'; import { useTrackPageview, FeatureFeedbackButton } from '@kbn/observability-shared-plugin/public'; +import { WithMetricsExplorerOptionsUrlState } from '../../../containers/metrics_explorer/with_metrics_explorer_options_url_state'; import { useKibanaEnvironmentContext } from '../../../hooks/use_kibana'; -import { SourceLoadingPage } from '../../../components/source_loading_page'; import { useMetricsExplorerViews } from '../../../hooks/use_metrics_explorer_views'; -import { MetricsSourceConfigurationProperties } from '../../../../common/metrics_sources'; import { useMetricsBreadcrumbs } from '../../../hooks/use_metrics_breadcrumbs'; -import { NoData, NoRemoteCluster } from '../../../components/empty_states'; +import { NoData } from '../../../components/empty_states'; import { MetricsExplorerCharts } from './components/charts'; import { MetricsExplorerToolbar } from './components/toolbar'; import { useMetricsExplorerState } from './hooks/use_metric_explorer_state'; -import { useSourceContext } from '../../../containers/metrics_source'; import { MetricsPageTemplate } from '../page_template'; import { metricsExplorerTitle } from '../../../translations'; -import { DerivedIndexPattern } from '../../../containers/metrics_source'; import { SavedViews } from './components/saved_views'; - -interface MetricsExplorerPageProps { - source: MetricsSourceConfigurationProperties; - derivedIndexPattern: DerivedIndexPattern; -} +import { MetricsExplorerOptionsContainer } from './hooks/use_metrics_explorer_options'; const METRICS_EXPLORER_FEEDBACK_URL = 'https://ela.st/survey-infra-metricsexplorer?usp=pp_url'; -export const MetricsExplorerPage = ({ source, derivedIndexPattern }: MetricsExplorerPageProps) => { +export const MetricsExplorerPage = () => { + useTrackPageview({ app: 'infra_metrics', path: 'metrics_explorer' }); + useTrackPageview({ app: 'infra_metrics', path: 'metrics_explorer', delay: 15000 }); + + useMetricsBreadcrumbs([ + { + text: metricsExplorerTitle, + }, + ]); + + return ( + + + + + ); +}; + +const MetricsExplorerContent = () => { const [enabled, setEnabled] = useState(false); const { isLoading, @@ -49,16 +59,14 @@ export const MetricsExplorerPage = ({ source, derivedIndexPattern }: MetricsExpl handleLoadMore, onViewStateChange, refresh, - } = useMetricsExplorerState(source, derivedIndexPattern, enabled); + } = useMetricsExplorerState({ enabled }); const { currentView } = useMetricsExplorerViews(); - const { source: sourceContext, metricIndicesExist } = useSourceContext(); + const { kibanaVersion, isCloudEnv, isServerlessEnv } = useKibanaEnvironmentContext(); useTrackPageview({ app: 'infra_metrics', path: 'metrics_explorer' }); useTrackPageview({ app: 'infra_metrics', path: 'metrics_explorer', delay: 15000 }); - const { remoteClustersExist } = sourceContext?.status ?? {}; - useEffect(() => { if (currentView) { onViewStateChange(currentView); @@ -84,68 +92,57 @@ export const MetricsExplorerPage = ({ source, derivedIndexPattern }: MetricsExpl currentTimerange: timeRange, }; - if (isLoading && !sourceContext) return ; - - if (!remoteClustersExist) { - return ; - } - return ( - - , - , - ], - }} - > - , + , + ], + }} + > + + {error ? ( + + ) : ( + - {error ? ( - - ) : ( - - )} - - + )} + ); }; diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/page_template.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/page_template.tsx index 35baef037c4e2..74128ad8eb41e 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/page_template.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/page_template.tsx @@ -12,16 +12,15 @@ import React, { useEffect } from 'react'; import { noMetricIndicesPromptDescription, noMetricIndicesPromptPrimaryActionTitle, + NoRemoteCluster, } from '../../components/empty_states'; -import { useSourceContext } from '../../containers/metrics_source'; +import { SourceErrorPage } from '../../components/source_error_page'; +import { SourceLoadingPage } from '../../components/source_loading_page'; +import { useMetricsDataViewContext, useSourceContext } from '../../containers/metrics_source'; import { useKibanaContextForPlugin } from '../../hooks/use_kibana'; +import { ErrorCallout } from './hosts/components/error_callout'; -interface MetricsPageTemplateProps extends LazyObservabilityPageTemplateProps { - hasData?: boolean; -} - -export const MetricsPageTemplate: React.FC = ({ - hasData = true, +export const MetricsPageTemplate: React.FC = ({ 'data-test-subj': _dataTestSubj, ...pageTemplateProps }) => { @@ -35,9 +34,11 @@ export const MetricsPageTemplate: React.FC = ({ }, } = useKibanaContextForPlugin(); - const { source } = useSourceContext(); + const { source, error: sourceError, loadSource, isLoading } = useSourceContext(); + const { error: dataViewLoadError, refetch: loadDataView } = useMetricsDataViewContext(); + const { remoteClustersExist, metricIndicesExist } = source?.status ?? {}; - const noDataConfig: NoDataConfig | undefined = hasData + const noDataConfig: NoDataConfig | undefined = metricIndicesExist ? undefined : { solution: i18n.translate('xpack.infra.metrics.noDataConfig.solutionName', { @@ -64,7 +65,7 @@ export const MetricsPageTemplate: React.FC = ({ }, ], starterPrompts: [ - ...(!hasData + ...(!metricIndicesExist ? [ { title: i18n.translate( @@ -85,11 +86,37 @@ export const MetricsPageTemplate: React.FC = ({ : []), ], }); - }, [hasData, setScreenContext, source]); + }, [metricIndicesExist, setScreenContext, source]); + + if (isLoading && !source) return ; + + if (!remoteClustersExist) { + return ; + } + + if (sourceError) { + ; + } + + if (dataViewLoadError) { + ; + } return ( diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/settings/source_configuration_settings.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/settings/source_configuration_settings.tsx index 9dd18644c30f1..de078dcb354df 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/settings/source_configuration_settings.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/settings/source_configuration_settings.tsx @@ -25,6 +25,7 @@ import { METRIC_INVENTORY_THRESHOLD_ALERT_TYPE_ID, METRIC_THRESHOLD_ALERT_TYPE_ID, } from '@kbn/rule-data-utils'; +import { PageTemplate } from '../../../components/page_template'; import { SourceLoadingPage } from '../../../components/source_loading_page'; import { useSourceContext } from '../../../containers/metrics_source'; import { useInfraMLCapabilitiesContext } from '../../../containers/ml/infra_ml_capabilities'; @@ -34,8 +35,6 @@ import { NameConfigurationPanel } from './name_configuration_panel'; import { useSourceConfigurationFormState } from './source_configuration_form_state'; import { useMetricsBreadcrumbs } from '../../../hooks/use_metrics_breadcrumbs'; import { settingsTitle } from '../../../translations'; - -import { MetricsPageTemplate } from '../page_template'; import { FeaturesConfigurationPanel } from './features_configuration_panel'; interface SourceConfigurationSettingsProps { shouldAllowEdit: boolean; @@ -72,12 +71,10 @@ export const SourceConfigurationSettings = ({ }, [http]); const { - createSourceConfiguration, + persistSourceConfiguration: updateSourceConfiguration, source, sourceExists, isLoading, - isUninitialized, - updateSourceConfiguration, } = useSourceContext(); const { @@ -103,9 +100,7 @@ export const SourceConfigurationSettings = ({ const persistUpdates = useCallback(async () => { await Promise.all([ - sourceExists - ? updateSourceConfiguration(formStateChanges) - : createSourceConfiguration(formState), + updateSourceConfiguration(sourceExists ? formStateChanges : formState), infraUiSettings.saveAll(), ]); resetForm(); @@ -115,7 +110,6 @@ export const SourceConfigurationSettings = ({ updateSourceConfiguration, formStateChanges, infraUiSettings, - createSourceConfiguration, formState, ]); @@ -132,12 +126,12 @@ export const SourceConfigurationSettings = ({ const { hasInfraMLCapabilities } = useInfraMLCapabilitiesContext(); - if ((isLoading || isUninitialized) && !source) { + if (isLoading && !source) { return ; } return ( - )} - + ); }; diff --git a/x-pack/plugins/observability_solution/infra/public/utils/data_view.ts b/x-pack/plugins/observability_solution/infra/public/utils/data_view.ts new file mode 100644 index 0000000000000..73d3e8c930ecb --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/utils/data_view.ts @@ -0,0 +1,85 @@ +/* + * 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 { DataView, DataViewsContract, type FieldSpec } from '@kbn/data-views-plugin/common'; +import { TIMESTAMP_FIELD } from '../../common/constants'; + +export interface ResolvedDataView { + dataViewReference: DataView; + indices: string; + fields: FieldSpec[]; + timeFieldName: string; +} + +interface PersistedDataView { + dataViewsService: DataViewsContract; + dataViewId: string; +} + +interface DataViewAttributes { + timeFieldName: string; + name?: string; +} + +export const resolveDataView = ({ + dataViewId, + dataViewsService, +}: { + dataViewId: string; + dataViewsService: DataViewsContract; +}) => { + try { + return resolvePersistedDataView({ dataViewsService, dataViewId }); + } catch { + return resolveAdHocDataView({ + dataViewsService, + dataViewId, + attributes: { + timeFieldName: TIMESTAMP_FIELD, + }, + }); + } +}; + +export const resolvePersistedDataView = async ({ + dataViewsService, + dataViewId, +}: PersistedDataView): Promise => { + const dataView = await dataViewsService.get(dataViewId, false); + + return { + indices: dataView.getIndexPattern(), + timeFieldName: dataView.timeFieldName ?? TIMESTAMP_FIELD, + fields: dataView.fields ?? [], + dataViewReference: dataView, + }; +}; + +export const resolveAdHocDataView = async ({ + dataViewsService, + dataViewId, + attributes, +}: PersistedDataView & { attributes: DataViewAttributes }): Promise => { + const { name, timeFieldName } = attributes; + const dataViewReference = await dataViewsService.create( + { + id: dataViewId, + name, + title: dataViewId, + timeFieldName, + }, + false, + false + ); + + return { + indices: dataViewId, + timeFieldName, + fields: dataViewReference.fields, + dataViewReference, + }; +}; diff --git a/x-pack/plugins/observability_solution/infra/public/utils/filters/build.ts b/x-pack/plugins/observability_solution/infra/public/utils/filters/build.ts index 0aee9c00814c6..9beef06244b63 100644 --- a/x-pack/plugins/observability_solution/infra/public/utils/filters/build.ts +++ b/x-pack/plugins/observability_solution/infra/public/utils/filters/build.ts @@ -36,8 +36,8 @@ export const buildCombinedAssetFilter = ({ meta: {}, }; } - const filtersFromValues = values.map((value) => buildPhraseFilter(indexField, value, dataView)); + const filtersFromValues = values.map((value) => buildPhraseFilter(indexField, value, dataView)); return buildCombinedFilter(BooleanRelation.OR, filtersFromValues, dataView); }; diff --git a/x-pack/plugins/observability_solution/infra/public/utils/kuery.ts b/x-pack/plugins/observability_solution/infra/public/utils/kuery.ts index aec9ec58aabaa..b74549359a9c7 100644 --- a/x-pack/plugins/observability_solution/infra/public/utils/kuery.ts +++ b/x-pack/plugins/observability_solution/infra/public/utils/kuery.ts @@ -10,7 +10,7 @@ import { DataViewBase } from '@kbn/es-query'; export const convertKueryToElasticSearchQuery = ( kueryExpression: string, - indexPattern: DataViewBase, + indexPattern?: DataViewBase, swallowErrors: boolean = true ) => { try { diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/tsvb/container_disk_io_bytes.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/tsvb/container_disk_io_bytes.ts index 3ba2b11740b6e..7320349f92e8d 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/tsvb/container_disk_io_bytes.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/tsvb/container_disk_io_bytes.ts @@ -13,7 +13,7 @@ export const containerDiskIOBytes: TSVBMetricModelCreator = ( interval ): TSVBMetricModel => ({ id: 'containerDiskIOBytes', - requires: ['docker.disk'], + requires: ['docker.diskio'], index_pattern: indexPattern, interval, time_field: timeField, diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/tsvb/container_diskio_ops.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/tsvb/container_diskio_ops.ts index 772c0d6c0a33e..a6887fb4e7638 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/tsvb/container_diskio_ops.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/tsvb/container_diskio_ops.ts @@ -13,7 +13,7 @@ export const containerDiskIOOps: TSVBMetricModelCreator = ( interval ): TSVBMetricModel => ({ id: 'containerDiskIOOps', - requires: ['docker.disk'], + requires: ['docker.diskio'], index_pattern: indexPattern, interval, time_field: timeField, diff --git a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/alert_details_app_section.tsx b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/alert_details_app_section.tsx index 8358d897cd7b1..324c84c9d923f 100644 --- a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/alert_details_app_section.tsx +++ b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/alert_details_app_section.tsx @@ -6,12 +6,14 @@ */ import { EuiFlexGroup, EuiLink } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import React, { useEffect } from 'react'; import { AlertSummaryField } from '@kbn/observability-plugin/public'; -import { useKibana } from '../../../../utils/kibana_react'; +import { ALL_VALUE } from '@kbn/slo-schema'; +import React, { useEffect } from 'react'; import { useFetchSloDetails } from '../../../../hooks/use_fetch_slo_details'; -import { ErrorRatePanel } from './components/error_rate/error_rate_panel'; +import { SLOGroupings } from '../../../../pages/slos/components/common/slo_groupings'; +import { useKibana } from '../../../../utils/kibana_react'; import { CustomAlertDetailsPanel } from './components/custom_panels/custom_panels'; +import { ErrorRatePanel } from './components/error_rate/error_rate_panel'; import { BurnRateAlert, BurnRateRule } from './types'; interface AppSectionProps { @@ -40,7 +42,7 @@ export default function AlertDetailsAppSection({ const alertLink = alert.link; useEffect(() => { - setAlertSummaryFields([ + const fields = [ { label: i18n.translate('xpack.slo.burnRateRule.alertDetailsAppSection.summaryField.slo', { defaultMessage: 'Source SLO', @@ -61,8 +63,20 @@ export default function AlertDetailsAppSection({ ), }, - ]); - }, [alertLink, rule, ruleLink, setAlertSummaryFields, basePath, slo]); + ]; + + if (instanceId !== ALL_VALUE) { + fields.push({ + label: i18n.translate( + 'xpack.slo.burnRateRule.alertDetailsAppSection.summaryField.instanceId', + { defaultMessage: 'SLO Instance' } + ), + value: , + }); + } + + setAlertSummaryFields(fields); + }, [alertLink, rule, ruleLink, setAlertSummaryFields, basePath, slo, instanceId]); return ( diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/common/slo_groupings.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/common/slo_groupings.tsx index b61d1edc5ed93..902e46d549e5b 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/common/slo_groupings.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/common/slo_groupings.tsx @@ -22,10 +22,11 @@ import { SLOWithSummaryResponse } from '@kbn/slo-schema'; export interface Props { slo: SLOWithSummaryResponse | undefined; direction?: 'column' | 'row'; + gutterSize?: 'none' | 's'; truncate?: boolean; } -export function SLOGroupings({ slo, direction = 'row', truncate = true }: Props) { +export function SLOGroupings({ slo, direction = 'row', gutterSize = 's', truncate = true }: Props) { const groups = Object.entries(slo?.groupings || []); const shouldTruncate = truncate && groups.length > 3; const firstThree = shouldTruncate ? groups.slice(0, 3) : groups; @@ -59,7 +60,7 @@ export function SLOGroupings({ slo, direction = 'row', truncate = true }: Props) direction={direction} > - {' '} + {rest.length && ( @@ -80,12 +81,16 @@ export function SLOGroupings({ slo, direction = 'row', truncate = true }: Props) } > - + ) : ( - + )} ); @@ -94,14 +99,16 @@ export function SLOGroupings({ slo, direction = 'row', truncate = true }: Props) function Entries({ entries, direction, + gutterSize = 's', }: { entries: Array<[string, unknown]>; direction: 'row' | 'column'; + gutterSize?: 'none' | 's'; }) { const { euiTheme } = useEuiTheme(); return ( - + {entries.map(([key, value]) => ( diff --git a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/compact_view/slo_list_compact_view.tsx b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/compact_view/slo_list_compact_view.tsx index 64685a943ce38..d773d56ac47f8 100644 --- a/x-pack/plugins/observability_solution/slo/public/pages/slos/components/compact_view/slo_list_compact_view.tsx +++ b/x-pack/plugins/observability_solution/slo/public/pages/slos/components/compact_view/slo_list_compact_view.tsx @@ -349,7 +349,7 @@ export function SloListCompactView({ sloList, loading, error }: Props) { render: (_, slo: SLOWithSummaryResponse) => { const groups = [slo.groupBy].flat(); return !groups.includes(ALL_VALUE) ? ( - + ) : ( {NOT_AVAILABLE_LABEL} ); diff --git a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/state.ts b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/state.ts index ee552c74ef7b8..9fbda10dfba56 100644 --- a/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/state.ts +++ b/x-pack/plugins/observability_solution/synthetics/common/runtime_types/monitor_management/state.ts @@ -46,6 +46,7 @@ export const MonitorManagementEnablementResultCodec = t.type({ canManageApiKeys: t.boolean, areApiKeysEnabled: t.boolean, isValidApiKey: t.boolean, + isServiceAllowed: t.boolean, }); export type MonitorManagementEnablementResult = t.TypeOf< diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/permissions.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/permissions.tsx index f9dd560e4742e..65b9732e217e9 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/permissions.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/components/permissions.tsx @@ -9,6 +9,8 @@ import React, { ReactNode } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiCallOut, EuiToolTip, EuiCode } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; +import { useEnablement } from '../../../hooks'; +import { SERVICE_NOT_ALLOWED } from '../../monitors_page/management/disabled_callout'; export const FleetPermissionsCallout = () => { return ( @@ -37,7 +39,18 @@ export const NoPermissionsTooltip = ({ canUsePublicLocations?: boolean; children: ReactNode; }) => { + const { isServiceAllowed } = useEnablement(); + const disabledMessage = getRestrictionReasonLabel(canEditSynthetics, canUsePublicLocations); + + if (!isServiceAllowed) { + return ( + + {children} + + ); + } + if (disabledMessage) { return ( diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/wrappers/service_allowed_wrapper.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/wrappers/service_allowed_wrapper.tsx deleted file mode 100644 index 980d76f76c868..0000000000000 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/common/wrappers/service_allowed_wrapper.tsx +++ /dev/null @@ -1,69 +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, { FC, PropsWithChildren } from 'react'; -import { i18n } from '@kbn/i18n'; -import { EuiButton, EuiEmptyPrompt, EuiLoadingLogo } from '@elastic/eui'; -import { useSyntheticsServiceAllowed } from '../../../hooks/use_service_allowed'; - -export const ServiceAllowedWrapper: FC> = ({ children }) => { - const { isAllowed, signupUrl, loading } = useSyntheticsServiceAllowed(); - - if (loading) { - return ( - } - title={

{LOADING_MONITOR_MANAGEMENT_LABEL}

} - /> - ); - } - - // checking for explicit false - if (isAllowed === false) { - return ( - {MONITOR_MANAGEMENT_LABEL}} - body={

{ACCESS_RESTRICTED_MESSAGE}

} - actions={[ - - {REQUEST_ACCESS_LABEL} - , - ]} - /> - ); - } - - return <>{children}; -}; - -const REQUEST_ACCESS_LABEL = i18n.translate('xpack.synthetics.monitorManagement.requestAccess', { - defaultMessage: 'Request access', -}); - -export const MONITOR_MANAGEMENT_LABEL = i18n.translate('xpack.synthetics.monitorManagement.label', { - defaultMessage: 'Synthetics App', -}); - -const LOADING_MONITOR_MANAGEMENT_LABEL = i18n.translate( - 'xpack.synthetics.monitorManagement.loading.label', - { - defaultMessage: 'Loading Synthetics App', - } -); - -export const ACCESS_RESTRICTED_MESSAGE = i18n.translate( - 'xpack.synthetics.monitorManagement.accessRestricted', - { - defaultMessage: 'Your access to globally managed testing infrastructure is restricted.', - } -); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/getting_started/getting_started_page.test.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/getting_started/getting_started_page.test.tsx index caa3a2d66fcfe..9c51fdf6b7b6e 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/getting_started/getting_started_page.test.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/getting_started/getting_started_page.test.tsx @@ -130,6 +130,14 @@ describe('GettingStartedPage', () => { , { state: { + syntheticsEnablement: { + loading: false, + enablement: { + canEnable: true, + isEnabled: true, + isServiceAllowed: true, + }, + }, serviceLocations: { locations: [], locationsLoaded: true, diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/getting_started/simple_monitor_form.test.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/getting_started/simple_monitor_form.test.tsx index 322cc2c653ef9..1c627435b1a29 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/getting_started/simple_monitor_form.test.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/getting_started/simple_monitor_form.test.tsx @@ -30,7 +30,7 @@ describe('SimpleMonitorForm', () => { // calls enabled API await waitFor(async () => { - expect(dispatchSpy).toHaveBeenCalledTimes(3); + expect(dispatchSpy).toHaveBeenCalledTimes(6); }); }); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/run_test_btn.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/run_test_btn.tsx index 316e57e4a5065..579cf526c1b3a 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/run_test_btn.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/form/run_test_btn.tsx @@ -18,8 +18,10 @@ import { runOnceMonitor } from '../../../state/manual_test_runs/api'; export const RunTestButton = ({ canUsePublicLocations = true, + isServiceAllowed, }: { canUsePublicLocations?: boolean; + isServiceAllowed?: boolean; }) => { const { formState, getValues, handleSubmit } = useFormContext(); @@ -60,7 +62,7 @@ export const RunTestButton = ({ ) => { if (isValid) { setMonitorData(format(formData, readOnly)); @@ -82,7 +85,10 @@ export const ActionBar = ({
- + {isEdit ? UPDATE_MONITOR_LABEL : CREATE_MONITOR_LABEL} diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_add_page.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_add_page.tsx index debe978973bac..f1b4b2648e4d7 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_add_page.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_add_page.tsx @@ -9,9 +9,11 @@ import React, { useEffect } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { useTrackPageview } from '@kbn/observability-shared-plugin/public'; +import { useCanUsePublicLocations } from '../../../../hooks/use_capabilities'; +import { CanUsePublicLocationsCallout } from './steps/can_use_public_locations_callout'; +import { DisabledCallout } from '../monitors_page/management/disabled_callout'; import { useEnablement } from '../../hooks'; import { getServiceLocations, selectServiceLocationsState } from '../../state'; -import { ServiceAllowedWrapper } from '../common/wrappers/service_allowed_wrapper'; import { useKibanaSpace } from './hooks'; import { MonitorSteps } from './steps'; @@ -29,6 +31,8 @@ export const MonitorAddPage = () => { useEnablement(); + const canUsePublicLocations = useCanUsePublicLocations(); + const dispatch = useDispatch(); useEffect(() => { dispatch(getServiceLocations()); @@ -39,17 +43,15 @@ export const MonitorAddPage = () => { return ; } - return locationsLoaded ? ( + if (!locationsLoaded) { + return ; + } + + return ( + + - ) : ( - ); }; - -export const MonitorAddPageWithServiceAllowed = React.memo(() => ( - - - -)); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_edit_page.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_edit_page.tsx index 16573ce19f57a..772a4bc36022b 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_edit_page.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/monitor_edit_page.tsx @@ -12,12 +12,13 @@ import { EuiEmptyPrompt } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { useTrackPageview, useFetcher } from '@kbn/observability-shared-plugin/public'; import { IHttpFetchError, ResponseErrorBody } from '@kbn/core-http-browser'; +import { CanUsePublicLocationsCallout } from './steps/can_use_public_locations_callout'; +import { DisabledCallout } from '../monitors_page/management/disabled_callout'; import { useCanUsePublicLocations } from '../../../../hooks/use_capabilities'; import { EditMonitorNotFound } from './edit_monitor_not_found'; import { LoadingState } from '../monitors_page/overview/overview/monitor_detail_flyout'; import { ConfigKey, SourceType } from '../../../../../common/runtime_types'; import { getServiceLocations, selectServiceLocationsState } from '../../state'; -import { ServiceAllowedWrapper } from '../common/wrappers/service_allowed_wrapper'; import { AlertingCallout } from '../common/alerting_callout/alerting_callout'; import { MonitorSteps } from './steps'; import { MonitorForm } from './form'; @@ -91,6 +92,8 @@ export const MonitorEditPage: React.FC = () => { return data && locationsLoaded && !loading && !error ? ( <> + + { canUsePublicLocations={canUsePublicLocations} > { ); }; - -export const MonitorEditPageWithServiceAllowed = React.memo(() => ( - - - -)); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/steps/can_use_public_locations_callout.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/steps/can_use_public_locations_callout.tsx new file mode 100644 index 0000000000000..21ac363bbe00e --- /dev/null +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/steps/can_use_public_locations_callout.tsx @@ -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 React from 'react'; +import { EuiCallOut, EuiSpacer } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; + +export const CanUsePublicLocationsCallout = ({ + canUsePublicLocations, +}: { + canUsePublicLocations?: boolean; +}) => { + if (!canUsePublicLocations) { + return ( + <> + + } + iconType="alert" + > +

+ +

+
+ + + ); + } + + return null; +}; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/steps/index.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/steps/index.tsx index 94f681f0fd411..16f1a5488400f 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/steps/index.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/steps/index.tsx @@ -16,7 +16,6 @@ import { MonitorTypePortal } from './monitor_type_portal'; import { ReadOnlyCallout } from './read_only_callout'; export const MonitorSteps = ({ - canUsePublicLocations, stepMap, projectId, isEditFlow = false, @@ -24,7 +23,6 @@ export const MonitorSteps = ({ }: { stepMap: StepMap; readOnly?: boolean; - canUsePublicLocations?: boolean; isEditFlow?: boolean; projectId?: string; }) => { @@ -34,9 +32,7 @@ export const MonitorSteps = ({ return ( <> - {isEditFlow && ( - - )} + {isEditFlow && } {isEditFlow ? ( steps.map((step) => (
diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/steps/read_only_callout.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/steps/read_only_callout.tsx index 6f6f4533bb7dc..6c64c579e3937 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/steps/read_only_callout.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitor_add_edit/steps/read_only_callout.tsx @@ -8,13 +8,7 @@ import React from 'react'; import { EuiCallOut, EuiSpacer } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -export const ReadOnlyCallout = ({ - projectId, - canUsePublicLocations, -}: { - projectId?: string; - canUsePublicLocations?: boolean; -}) => { +export const ReadOnlyCallout = ({ projectId }: { projectId?: string }) => { if (projectId) { return ( <> @@ -40,30 +34,5 @@ export const ReadOnlyCallout = ({ ); } - if (!canUsePublicLocations) { - return ( - <> - - } - iconType="alert" - > -

- -

-
- - - ); - } - return null; }; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/create_monitor_button.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/create_monitor_button.tsx index dd3556bdf3754..8baf0f2842918 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/create_monitor_button.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/create_monitor_button.tsx @@ -17,9 +17,7 @@ import { SyntheticsSettingsContext } from '../../contexts/synthetics_settings_co export const CreateMonitorButton: React.FC = () => { const { basePath } = useContext(SyntheticsSettingsContext); - const { - enablement: { isEnabled }, - } = useEnablement(); + const { isEnabled, isServiceAllowed } = useEnablement(); const canEditSynthetics = useCanEditSynthetics(); @@ -31,7 +29,7 @@ export const CreateMonitorButton: React.FC = () => { iconSide="left" iconType="plusInCircleFilled" href={`${basePath}/app/synthetics${MONITOR_ADD_ROUTE}`} - isDisabled={!isEnabled || !canEditSynthetics} + isDisabled={!isEnabled || !canEditSynthetics || !isServiceAllowed} data-test-subj="syntheticsAddMonitorBtn" > { @@ -14,6 +15,8 @@ export const useCanUsePublicLocById = (configId: string) => { data: { monitors }, } = useSelector(selectOverviewState); + const { isServiceAllowed } = useEnablement(); + const hasManagedLocation = monitors?.filter( (mon) => mon.configId === configId && mon.location.isServiceManaged ); @@ -21,5 +24,9 @@ export const useCanUsePublicLocById = (configId: string) => { const canUsePublicLocations = useKibana().services?.application?.capabilities.uptime.elasticManagedLocationsEnabled ?? true; + if (!isServiceAllowed) { + return false; + } + return hasManagedLocation ? !!canUsePublicLocations : true; }; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/disabled_callout.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/disabled_callout.tsx index 885f44eaa5ae1..96d5a50c311e4 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/disabled_callout.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/disabled_callout.tsx @@ -7,35 +7,62 @@ import React from 'react'; import { EuiCallOut, EuiLink, EuiSpacer } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; import * as labels from './labels'; import { useEnablement } from '../../../hooks'; -export const DisabledCallout = ({ total }: { total: number }) => { - const { enablement, invalidApiKeyError, loading } = useEnablement(); +export const DisabledCallout = ({ total }: { total?: number }) => { + const { isEnabled, invalidApiKeyError, loading, isServiceAllowed, canEnable } = useEnablement(); - const showDisableCallout = !enablement.isEnabled && total > 0; - const showInvalidApiKeyCallout = invalidApiKeyError && total > 0; + const showDisableCallout = !isEnabled && total && total > 0; + const showInvalidApiKeyCallout = invalidApiKeyError && total && total > 0; - if (!showDisableCallout && !showInvalidApiKeyCallout) { + if ((!showDisableCallout && !showInvalidApiKeyCallout && isServiceAllowed) || loading) { return null; } - return !enablement.canEnable && !loading ? ( + const disabledCallout = + !canEnable && showDisableCallout && !loading ? ( + <> + +

{labels.CALLOUT_MANAGEMENT_DESCRIPTION}

+

+ {labels.CALLOUT_MANAGEMENT_CONTACT_ADMIN}{' '} + + {labels.LEARN_MORE_LABEL} + +

+
+ + + ) : null; + + const disAllowedCallout = !isServiceAllowed ? ( <> - -

{labels.CALLOUT_MANAGEMENT_DESCRIPTION}

-

- {labels.CALLOUT_MANAGEMENT_CONTACT_ADMIN}{' '} - - {labels.LEARN_MORE_LABEL} - -

+ +

{SERVICE_NOT_ALLOWED}

) : null; + + return ( + <> + {disabledCallout} + {disAllowedCallout} + + ); }; + +export const SERVICE_NOT_ALLOWED = i18n.translate('xpack.synthetics.synthetics.serviceNotAllowed', { + defaultMessage: + 'Account is blocked from using Elastic managed locations, please contact support. Your monitors have been paused.', +}); + +const ACCOUNT_BLOCKED = i18n.translate('xpack.synthetics.synthetics.accountBlocked', { + defaultMessage: 'Account is blocked.', +}); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/columns.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/columns.tsx index 684fb9fad8036..e7600777ca9ba 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/columns.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/columns.tsx @@ -11,6 +11,7 @@ import React from 'react'; import { useHistory } from 'react-router-dom'; import { FETCH_STATUS } from '@kbn/observability-shared-plugin/public'; import { useKibana } from '@kbn/kibana-react-plugin/public'; +import { useEnablement } from '../../../../hooks'; import { useCanEditSynthetics } from '../../../../../../hooks/use_capabilities'; import { isStatusEnabled, @@ -50,6 +51,8 @@ export function useMonitorListColumns({ const history = useHistory(); const canEditSynthetics = useCanEditSynthetics(); + const { isServiceAllowed } = useEnablement(); + const { alertStatus, updateAlertEnabledState } = useMonitorAlertEnable(); const isActionLoading = (fields: EncryptedSyntheticsSavedMonitor) => { @@ -187,7 +190,10 @@ export function useMonitorListColumns({ icon: 'pencil' as const, type: 'icon' as const, enabled: (fields) => - canEditSynthetics && !isActionLoading(fields) && isPublicLocationsAllowed(fields), + canEditSynthetics && + !isActionLoading(fields) && + isPublicLocationsAllowed(fields) && + isServiceAllowed, onClick: (fields) => { history.push({ pathname: `/edit-monitor/${fields[ConfigKey.CONFIG_ID]}`, @@ -226,7 +232,10 @@ export function useMonitorListColumns({ type: 'icon' as const, color: 'danger' as const, enabled: (fields) => - canEditSynthetics && !isActionLoading(fields) && isPublicLocationsAllowed(fields), + canEditSynthetics && + !isActionLoading(fields) && + isPublicLocationsAllowed(fields) && + isServiceAllowed, onClick: (fields) => { updateAlertEnabledState({ monitor: { diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/monitor_enabled.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/monitor_enabled.tsx index 29555c0cf1e90..0814ab1074494 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/monitor_enabled.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/management/monitor_list_table/monitor_enabled.tsx @@ -14,7 +14,7 @@ import { useCanEditSynthetics, useCanUsePublicLocations, } from '../../../../../../hooks/use_capabilities'; -import { useMonitorEnableHandler } from '../../../../hooks'; +import { useEnablement, useMonitorEnableHandler } from '../../../../hooks'; import { NoPermissionsTooltip } from '../../../common/components/permissions'; import * as labels from './labels'; @@ -37,6 +37,8 @@ export const MonitorEnabled = ({ const canUsePublicLocations = useCanUsePublicLocations(monitor?.[ConfigKey.LOCATIONS]); + const { isServiceAllowed } = useEnablement(); + const monitorName = monitor[ConfigKey.NAME]; const statusLabels = useMemo(() => { return { @@ -75,7 +77,9 @@ export const MonitorEnabled = ({ { - const { enablement, loading } = useEnablement(); - const { isEnabled } = enablement; + const { isEnabled, loading } = useEnablement(); return !isEnabled && !loading ? ( { +export const MonitorManagementPage: React.FC = () => { useTrackPageview({ app: 'synthetics', path: 'monitors' }); useTrackPageview({ app: 'synthetics', path: 'monitors', delay: 15000 }); useMonitorListBreadcrumbs(); - const { - error: enablementError, - enablement: { isEnabled }, - loading: enablementLoading, - } = useEnablement(); + const { error: enablementError, isEnabled, loading: enablementLoading } = useEnablement(); useOverviewStatus({ scopeStatusByLocation: false }); @@ -65,9 +60,3 @@ const MonitorManagementPage: React.FC = () => { ); }; - -export const MonitorsPageWithServiceAllowed = React.memo(() => ( - - - -)); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.test.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.test.tsx index ea8edd7878a40..6ff6118ad29db 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.test.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.test.tsx @@ -12,6 +12,7 @@ import { ActionsPopover } from './actions_popover'; import * as editMonitorLocatorModule from '../../../../hooks/use_edit_monitor_locator'; import * as monitorDetailLocatorModule from '../../../../hooks/use_monitor_detail_locator'; import * as monitorEnableHandlerModule from '../../../../hooks/use_monitor_enable_handler'; +import * as enablementHook from '../../../../hooks/use_enablement'; import { FETCH_STATUS } from '@kbn/observability-shared-plugin/public'; import { MonitorOverviewItem } from '../types'; @@ -19,6 +20,17 @@ describe('ActionsPopover', () => { let testMonitor: MonitorOverviewItem; beforeEach(() => { + jest.spyOn(enablementHook, 'useEnablement').mockReturnValue({ + isServiceAllowed: true, + areApiKeysEnabled: true, + canManageApiKeys: true, + canEnable: true, + isEnabled: true, + invalidApiKeyError: false, + loading: false, + error: null, + }); + testMonitor = { location: { id: 'us_central', @@ -106,6 +118,7 @@ describe('ActionsPopover', () => { locationId={testMonitor.location.id} /> ); + expect(getByRole('link')?.getAttribute('href')).toBe('/a/test/edit/url'); }); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx index 55dcdb3d06341..dc65e36ed18d7 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview/actions_popover.tsx @@ -29,7 +29,7 @@ import { import { useMonitorAlertEnable } from '../../../../hooks/use_monitor_alert_enable'; import { ConfigKey, MonitorOverviewItem } from '../../../../../../../common/runtime_types'; import { useCanEditSynthetics } from '../../../../../../hooks/use_capabilities'; -import { useMonitorEnableHandler, useLocationName } from '../../../../hooks'; +import { useMonitorEnableHandler, useLocationName, useEnablement } from '../../../../hooks'; import { setFlyoutConfig } from '../../../../state/overview/actions'; import { useEditMonitorLocator } from '../../../../hooks/use_edit_monitor_locator'; import { useMonitorDetailLocator } from '../../../../hooks/use_monitor_detail_locator'; @@ -116,6 +116,8 @@ export function ActionsPopover({ const canUsePublicLocations = useCanUsePublicLocById(monitor.configId); + const { isServiceAllowed } = useEnablement(); + const labels = useMemo( () => ({ enabledSuccessLabel: enabledSuccessLabel(monitor.name), @@ -185,7 +187,7 @@ export function ActionsPopover({ ), icon: 'beaker', - disabled: testInProgress || !canUsePublicLocations, + disabled: testInProgress || !canUsePublicLocations || !isServiceAllowed, onClick: () => { dispatch(manualTestMonitorAction.get({ configId: monitor.configId, name: monitor.name })); dispatch(setFlyoutConfig(null)); @@ -199,7 +201,7 @@ export function ActionsPopover({ ), icon: 'pencil', - disabled: !canEditSynthetics, + disabled: !canEditSynthetics || !isServiceAllowed, href: editUrl, }, { @@ -228,7 +230,7 @@ export function ActionsPopover({ {monitor.isStatusAlertEnabled ? disableAlertLabel : enableMonitorAlertLabel} ), - disabled: !canEditSynthetics || !canUsePublicLocations, + disabled: !canEditSynthetics || !canUsePublicLocations || !isServiceAllowed, icon: alertLoading ? ( ) : monitor.isStatusAlertEnabled ? ( diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx index 7efcb5059432b..e16633fed2444 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/overview/overview_page.tsx @@ -52,10 +52,7 @@ export const OverviewPage: React.FC = () => { } }, [dispatch, locationsLoaded, locationsLoading]); - const { - enablement: { isEnabled }, - loading: enablementLoading, - } = useEnablement(); + const { isEnabled, loading: enablementLoading } = useEnablement(); const { loaded: overviewLoaded, diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/route_config.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/route_config.tsx index 0ac6a3ccc0f7e..e2a7ded0dff64 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/route_config.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/monitors_page/route_config.tsx @@ -14,7 +14,7 @@ import { RefreshButton } from '../common/components/refresh_button'; import { OverviewPage } from './overview/overview_page'; import { MonitorsPageHeader } from './management/page_header/monitors_page_header'; import { CreateMonitorButton } from './create_monitor_button'; -import { MonitorsPageWithServiceAllowed } from './monitors_page'; +import { MonitorManagementPage } from './monitors_page'; import { RouteProps } from '../../routes'; import { MONITORS_ROUTE, OVERVIEW_ROUTE } from '../../../../../common/constants'; @@ -48,7 +48,7 @@ export const getMonitorsRoute = ( values: { baseTitle }, }), path: MONITORS_ROUTE, - component: MonitorsPageWithServiceAllowed, + component: MonitorManagementPage, dataTestSubj: 'syntheticsMonitorManagementPage', pageHeader: { ...sharedProps, diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/private_locations/manage_private_locations.test.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/private_locations/manage_private_locations.test.tsx index ab599de31c0c1..24c32569f1f2a 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/private_locations/manage_private_locations.test.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/private_locations/manage_private_locations.test.tsx @@ -35,6 +35,16 @@ describe('', () => { onDelete: jest.fn(), deleteLoading: false, }); + jest.spyOn(permissionsHooks, 'useEnablement').mockReturnValue({ + isServiceAllowed: true, + areApiKeysEnabled: true, + canManageApiKeys: true, + canEnable: true, + isEnabled: true, + invalidApiKeyError: false, + loading: false, + error: null, + }); }); it.each([true, false])( diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/project_api_keys/project_api_keys.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/project_api_keys/project_api_keys.tsx index e03ce1879199e..5ea801dea4ed3 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/project_api_keys/project_api_keys.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/components/settings/project_api_keys/project_api_keys.tsx @@ -21,10 +21,7 @@ const syntheticsTestRunDocsLink = 'https://www.elastic.co/guide/en/observability/current/synthetic-run-tests.html'; export const ProjectAPIKeys = () => { - const { - loading: enablementLoading, - enablement: { canManageApiKeys }, - } = useEnablement(); + const { loading: enablementLoading, canManageApiKeys } = useEnablement(); const [apiKey, setApiKey] = useState(undefined); const [loadAPIKey, setLoadAPIKey] = useState(false); const [accessToElasticManagedLocations, setAccessToElasticManagedLocations] = useState(true); diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/hooks/index.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/hooks/index.ts index 6f95e839dcda6..2e5d9e2f76d66 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/hooks/index.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/hooks/index.ts @@ -8,7 +8,6 @@ export * from './use_absolute_date'; export * from './use_url_params'; export * from './use_breadcrumbs'; -export * from './use_service_allowed'; export * from './use_enablement'; export * from './use_locations'; export * from './use_last_x_checks'; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/hooks/use_enablement.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/hooks/use_enablement.ts index 99b34ec3b86e5..7032e6c9cb4d1 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/hooks/use_enablement.ts +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/hooks/use_enablement.ts @@ -32,12 +32,11 @@ export function useEnablement() { }, [application, enablement, loading]); return { - enablement: { - areApiKeysEnabled: enablement?.areApiKeysEnabled, - canManageApiKeys: enablement?.canManageApiKeys, - canEnable: enablement?.canEnable, - isEnabled: enablement?.isEnabled, - }, + areApiKeysEnabled: enablement?.areApiKeysEnabled, + canManageApiKeys: enablement?.canManageApiKeys, + canEnable: enablement?.canEnable, + isEnabled: enablement?.isEnabled, + isServiceAllowed: Boolean(enablement?.isServiceAllowed), invalidApiKeyError: enablement ? !Boolean(enablement?.isValidApiKey) : false, error, loading, diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/hooks/use_service_allowed.ts b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/hooks/use_service_allowed.ts deleted file mode 100644 index 2e2e0f1254acf..0000000000000 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/hooks/use_service_allowed.ts +++ /dev/null @@ -1,23 +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 { useDispatch } from 'react-redux'; -import { useEffect } from 'react'; -// import { syntheticsServiceAllowedSelector } from '../../../state/selectors'; -// import { getSyntheticsServiceAllowed } from '../../../state/actions'; - -export const useSyntheticsServiceAllowed = () => { - const dispatch = useDispatch(); - - useEffect(() => { - // dispatch(getSyntheticsServiceAllowed.get()); - }, [dispatch]); - - // return useSelector(syntheticsServiceAllowedSelector); - // TODO Implement for Synthetics App - return { isAllowed: true, signupUrl: undefined, loading: false }; -}; diff --git a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/routes.tsx b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/routes.tsx index 69e077ae82e7e..ca1d194994e8d 100644 --- a/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/routes.tsx +++ b/x-pack/plugins/observability_solution/synthetics/public/apps/synthetics/routes.tsx @@ -29,8 +29,8 @@ import { getStepDetailsRoute } from './components/step_details_page/route_config import { getTestRunDetailsRoute } from './components/test_run_details/route_config'; import { getSettingsRouteConfig } from './components/settings/route_config'; import { TestRunDetails } from './components/test_run_details/test_run_details'; -import { MonitorAddPageWithServiceAllowed } from './components/monitor_add_edit/monitor_add_page'; -import { MonitorEditPageWithServiceAllowed } from './components/monitor_add_edit/monitor_edit_page'; +import { MonitorAddPage } from './components/monitor_add_edit/monitor_add_page'; +import { MonitorEditPage } from './components/monitor_add_edit/monitor_edit_page'; import { GettingStartedPage } from './components/getting_started/getting_started_page'; import { InspectMonitorPortalNode, @@ -92,7 +92,7 @@ const getRoutes = ( values: { baseTitle }, }), path: MONITOR_ADD_ROUTE, - component: MonitorAddPageWithServiceAllowed, + component: MonitorAddPage, dataTestSubj: 'syntheticsMonitorAddPage', restrictWidth: true, pageHeader: { @@ -111,7 +111,7 @@ const getRoutes = ( values: { baseTitle }, }), path: MONITOR_EDIT_ROUTE, - component: MonitorEditPageWithServiceAllowed, + component: MonitorEditPage, dataTestSubj: 'syntheticsMonitorEditPage', restrictWidth: true, pageHeader: { diff --git a/x-pack/plugins/observability_solution/synthetics/server/routes/synthetics_service/enablement.ts b/x-pack/plugins/observability_solution/synthetics/server/routes/synthetics_service/enablement.ts index 4c29cb300d6fa..b78c71e71353f 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/routes/synthetics_service/enablement.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/routes/synthetics_service/enablement.ts @@ -18,8 +18,14 @@ export const getSyntheticsEnablementRoute: SyntheticsRestApiRouteFactory = () => path: SYNTHETICS_API_URLS.SYNTHETICS_ENABLEMENT, writeAccess: false, validate: {}, - handler: async ({ savedObjectsClient, request, server }): Promise => { + handler: async ({ + savedObjectsClient, + request, + server, + syntheticsMonitorClient, + }): Promise => { try { + const isServiceAllowed = syntheticsMonitorClient.syntheticsService.isAllowed; const result = await getSyntheticsEnablement({ server, }); @@ -44,12 +50,14 @@ export const getSyntheticsEnablementRoute: SyntheticsRestApiRouteFactory = () => server, }); } else { - return result; + return { ...result, isServiceAllowed }; } - return getSyntheticsEnablement({ + const res = await getSyntheticsEnablement({ server, }); + + return { ...res, isServiceAllowed }; } catch (e) { server.logger.error(e); throw e; diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/service_api_client.test.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/service_api_client.test.ts index 3c2a019625136..66ef4e9faa0c8 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/service_api_client.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/service_api_client.test.ts @@ -112,7 +112,7 @@ describe('checkAccountAccessStatus', () => { it('includes a header with the kibana version', async () => { const apiClient = new ServiceAPIClient( jest.fn() as unknown as Logger, - { tls: { certificate: 'crt', key: 'k' } } as ServiceConfig, + { tls: { certificate: 'crt', key: 'k' }, manifestUrl: 'http://localhost' } as ServiceConfig, { isDev: false, stackVersion: '8.4', coreStart: mockCoreStart } as SyntheticsServerSetup ); diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/service_api_client.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/service_api_client.ts index f5c996e5efc59..09ad88476ec06 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/service_api_client.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/service_api_client.ts @@ -86,7 +86,7 @@ export class ServiceAPIClient { } async checkAccountAccessStatus() { - if (this.authorization) { + if (this.authorization || !this.config?.manifestUrl) { // in case username/password is provided, we assume it's always allowed return { allowed: true, signupUrl: null }; } diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_service.test.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_service.test.ts index e7fcff93c8018..c69cafa41e848 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_service.test.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_service.test.ts @@ -140,6 +140,7 @@ describe('SyntheticsService', () => { service.apiClient.locations = locations; service.locations = locations; + service.isAllowed = true; jest.spyOn(service, 'getOutput').mockResolvedValue({ hosts: ['es'], api_key: 'i:k' }); jest.spyOn(service, 'getSyntheticsParams').mockResolvedValue({}); diff --git a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_service.ts b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_service.ts index b2cf070b5bb34..35bf0d9dc7ce6 100644 --- a/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_service.ts +++ b/x-pack/plugins/observability_solution/synthetics/server/synthetics_service/synthetics_service.ts @@ -78,11 +78,12 @@ export class SyntheticsService { this.logger = server.logger; this.server = server; this.config = server.config.service ?? {}; - this.isAllowed = false; + + // set isAllowed to false if manifestUrl is not set + this.isAllowed = this.config.manifestUrl ? false : true; this.signupUrl = null; this.apiClient = new ServiceAPIClient(server.logger, this.config, this.server); - this.esHosts = getEsHosts({ config: this.config, cloud: server.cloud }); this.locations = []; @@ -188,7 +189,7 @@ export class SyntheticsService { await service.pushConfigs(); } else { if (!service.isAllowed) { - service.logger.debug( + service.logger.error( 'User is not allowed to access Synthetics service. Please contact support.' ); } @@ -342,7 +343,7 @@ export class SyntheticsService { async addConfigs(configs: ConfigData[]) { try { - if (configs.length === 0) { + if (configs.length === 0 || !this.isAllowed) { return; } @@ -367,7 +368,7 @@ export class SyntheticsService { async editConfig(monitorConfig: ConfigData[], isEdit = true) { try { - if (monitorConfig.length === 0) { + if (monitorConfig.length === 0 || !this.isAllowed) { return; } const license = await this.getLicense(); diff --git a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/get_snapshot_counts.ts b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/get_snapshot_counts.ts index b128c77fa5915..d3128caf2f8a8 100644 --- a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/get_snapshot_counts.ts +++ b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/get_snapshot_counts.ts @@ -48,12 +48,8 @@ export const getSnapshotCount: UMElasticsearchQueryFn => { - const { body: res } = await context.search( - { - body: statusCountBody(await context.dateAndCustomFilters(), context), - }, - 'getSnapshotCount' - ); + const body = statusCountBody(await context.dateAndCustomFilters(), context); + const { body: res } = await context.search(body, 'getSnapshotCount'); return ( (res.aggregations?.counts?.value as Snapshot) ?? { diff --git a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/search/find_potential_matches.ts b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/search/find_potential_matches.ts index 2649205d3b473..7d988ed50c435 100644 --- a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/search/find_potential_matches.ts +++ b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/search/find_potential_matches.ts @@ -41,11 +41,7 @@ export const findPotentialMatches = async ( const query = async (queryContext: QueryContext, searchAfter: any, size: number) => { const body = await queryBody(queryContext, searchAfter, size); - const params = { - body, - }; - - const response = await queryContext.search(params, 'getMonitorList-potentialMatches'); + const response = await queryContext.search(body, 'getMonitorList-potentialMatches'); return response; }; diff --git a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/search/query_context.ts b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/search/query_context.ts index 1ab9d9ece169f..9f76d8e37b099 100644 --- a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/search/query_context.ts +++ b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/search/query_context.ts @@ -7,7 +7,7 @@ import moment from 'moment'; import type { ESFilter } from '@kbn/es-types'; -import type { SearchRequest } from '@kbn/data-plugin/common'; +import type { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; import type { CursorPagination } from './types'; import { CursorDirection, SortOrder } from '../../../../../common/runtime_types'; import { UptimeEsClient } from '../../lib'; diff --git a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/search/refine_potential_matches.ts b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/search/refine_potential_matches.ts index 7956966ec71c5..0b38979676e4e 100644 --- a/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/search/refine_potential_matches.ts +++ b/x-pack/plugins/observability_solution/uptime/server/legacy_uptime/lib/requests/search/refine_potential_matches.ts @@ -5,6 +5,7 @@ * 2.0. */ +import type { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; import { QueryContext } from './query_context'; import { MonitorSummary, Ping } from '../../../../../common/runtime_types'; @@ -115,50 +116,48 @@ export const query = async ( queryContext: QueryContext, potentialMatchMonitorIDs: string[] ): Promise => { - const params = { - body: { - size: 0, - query: { - bool: { - filter: [ - await queryContext.dateRangeFilter(), - { terms: { 'monitor.id': potentialMatchMonitorIDs } }, - ], - }, + const params: SearchRequest = { + size: 0, + query: { + bool: { + filter: [ + await queryContext.dateRangeFilter(), + { terms: { 'monitor.id': potentialMatchMonitorIDs } }, + ], }, - aggs: { - monitor: { - terms: { - field: 'monitor.id', - size: potentialMatchMonitorIDs.length, - order: { _key: queryContext.cursorOrder() }, - }, - aggs: { - location: { - terms: { field: 'observer.geo.name', missing: 'N/A', size: 100 }, - aggs: { - summaries: { - // only match summary docs because we only want the latest *complete* check group. - filter: { exists: { field: 'summary' } }, - aggs: { - latest: { - top_hits: { - sort: [{ '@timestamp': 'desc' }], - size: 1, - }, + }, + aggs: { + monitor: { + terms: { + field: 'monitor.id', + size: potentialMatchMonitorIDs.length, + order: { _key: queryContext.cursorOrder() }, + }, + aggs: { + location: { + terms: { field: 'observer.geo.name', missing: 'N/A', size: 100 }, + aggs: { + summaries: { + // only match summary docs because we only want the latest *complete* check group. + filter: { exists: { field: 'summary' } }, + aggs: { + latest: { + top_hits: { + sort: [{ '@timestamp': 'desc' }], + size: 1, }, }, }, - // We want to find the latest check group, even if it's not part of a summary - latest_matching: { - filter: queryContext.filterClause || { match_all: {} }, - aggs: { - top: { - top_hits: { - _source: ['@timestamp'], - sort: [{ '@timestamp': 'desc' }], - size: 1, - }, + }, + // We want to find the latest check group, even if it's not part of a summary + latest_matching: { + filter: queryContext.filterClause || { match_all: {} }, + aggs: { + top: { + top_hits: { + _source: ['@timestamp'], + sort: [{ '@timestamp': 'desc' }], + size: 1, }, }, }, diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/execution_log_table/execution_log_table.test.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/execution_log_table/execution_log_table.test.tsx index 939c2a03547d7..cda7e4e200877 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/execution_log_table/execution_log_table.test.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/execution_log_table/execution_log_table.test.tsx @@ -8,6 +8,7 @@ import React from 'react'; import { noop } from 'lodash/fp'; import { render, screen } from '@testing-library/react'; +import { coreMock } from '@kbn/core/public/mocks'; import { TestProviders } from '../../../../../common/mock'; import { useRuleDetailsContextMock } from '../__mocks__/rule_details_context'; @@ -22,6 +23,8 @@ jest.mock('../../../../../common/containers/sourcerer'); jest.mock('../../../../rule_monitoring/components/execution_results_table/use_execution_results'); jest.mock('../rule_details_context'); +const coreStart = coreMock.createStart(); + const mockUseSourcererDataView = useSourcererDataView as jest.Mock; mockUseSourcererDataView.mockReturnValue({ indexPattern: { fields: [] }, @@ -42,7 +45,7 @@ describe('ExecutionLogTable', () => { test('Shows total events returned', () => { const ruleDetailsContext = useRuleDetailsContextMock.create(); (useRuleDetailsContext as jest.Mock).mockReturnValue(ruleDetailsContext); - render(, { + render(, { wrapper: TestProviders, }); expect(screen.getByTestId('executionsShowing')).toHaveTextContent('Showing 7 rule executions'); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/execution_log_table/execution_log_table.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/execution_log_table/execution_log_table.tsx index 1171c22fbcea2..7770548075511 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/execution_log_table/execution_log_table.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/execution_log_table/execution_log_table.tsx @@ -26,7 +26,10 @@ import { import type { Filter, Query } from '@kbn/es-query'; import { buildFilter, FILTERS } from '@kbn/es-query'; import { MAX_EXECUTION_EVENTS_DISPLAYED } from '@kbn/securitysolution-rules'; -import { mountReactNode } from '@kbn/core-mount-utils-browser-internal'; +import { toMountPoint } from '@kbn/react-kibana-mount'; +import type { AnalyticsServiceStart } from '@kbn/core-analytics-browser'; +import type { I18nStart } from '@kbn/core-i18n-browser'; +import type { ThemeServiceStart } from '@kbn/core-theme-browser'; import { InputsModelId } from '../../../../../common/store/inputs/constants'; @@ -82,7 +85,13 @@ const DatePickerEuiFlexItem = styled(EuiFlexItem)` max-width: 582px; `; -interface ExecutionLogTableProps { +interface StartServices { + analytics: AnalyticsServiceStart; + i18n: I18nStart; + theme: ThemeServiceStart; +} + +interface ExecutionLogTableProps extends StartServices { ruleId: string; selectAlertsTab: () => void; } @@ -96,6 +105,7 @@ interface CachedGlobalQueryState { const ExecutionLogTableComponent: React.FC = ({ ruleId, selectAlertsTab, + ...startServices }) => { const { docLinks, @@ -299,7 +309,7 @@ const ExecutionLogTableComponent: React.FC = ({ successToastId.current = addSuccess( { title: i18n.ACTIONS_SEARCH_FILTERS_HAVE_BEEN_UPDATED_TITLE, - text: mountReactNode( + text: toMountPoint( <>

{i18n.ACTIONS_SEARCH_FILTERS_HAVE_BEEN_UPDATED_DESCRIPTION}

@@ -309,7 +319,8 @@ const ExecutionLogTableComponent: React.FC = ({ - + , + startServices ), }, // Essentially keep toast around till user dismisses via 'x' @@ -333,6 +344,7 @@ const ExecutionLogTableComponent: React.FC = ({ selectAlertsTab, timerange, uuidDataViewField, + startServices, ] ); diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx index e99e6d6659034..2dacd37f7d245 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_details_ui/pages/rule_details/index.tsx @@ -179,6 +179,9 @@ const RuleDetailsPageComponent: React.FC = ({ clearSelected, }) => { const { + analytics, + i18n: i18nStart, + theme, application: { navigateToApp, capabilities: { actions }, @@ -769,7 +772,13 @@ const RuleDetailsPageComponent: React.FC = ({ /> - + diff --git a/x-pack/plugins/security_solution/tsconfig.json b/x-pack/plugins/security_solution/tsconfig.json index 68351d1dd48a1..0a74be06da7d0 100644 --- a/x-pack/plugins/security_solution/tsconfig.json +++ b/x-pack/plugins/security_solution/tsconfig.json @@ -105,7 +105,6 @@ "@kbn/react-field", "@kbn/field-types", "@kbn/securitysolution-rules", - "@kbn/core-mount-utils-browser-internal", "@kbn/cases-components", "@kbn/event-log-plugin", "@kbn/task-manager-plugin", @@ -203,6 +202,9 @@ "@kbn/search-types", "@kbn/field-utils", "@kbn/core-saved-objects-api-server-mocks", - "@kbn/langchain" + "@kbn/langchain", + "@kbn/core-analytics-browser", + "@kbn/core-i18n-browser", + "@kbn/core-theme-browser" ] } diff --git a/x-pack/plugins/spaces/common/types/space/v1.ts b/x-pack/plugins/spaces/common/types/space/v1.ts index 0d0a32d758da8..e18ad5e656efc 100644 --- a/x-pack/plugins/spaces/common/types/space/v1.ts +++ b/x-pack/plugins/spaces/common/types/space/v1.ts @@ -58,6 +58,11 @@ export interface Space { * @private */ _reserved?: boolean; + + /** + * Solution selected for this space. + */ + solution?: 'security' | 'observability' | 'search' | 'classic'; } /** diff --git a/x-pack/plugins/spaces/server/lib/space_schema.test.ts b/x-pack/plugins/spaces/server/lib/space_schema.test.ts index d6911a987786e..c31d7f5ca3c22 100644 --- a/x-pack/plugins/spaces/server/lib/space_schema.test.ts +++ b/x-pack/plugins/spaces/server/lib/space_schema.test.ts @@ -5,7 +5,11 @@ * 2.0. */ -import { spaceSchema } from './space_schema'; +import { getSpaceSchema } from './space_schema'; + +// non-serverless space schema +const spaceBaseSchema = getSpaceSchema(false); +const spaceServerlessSchema = getSpaceSchema(true); const defaultProperties = { id: 'foo', @@ -15,7 +19,7 @@ const defaultProperties = { describe('#id', () => { test('is required', () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, id: undefined, }) @@ -26,7 +30,7 @@ describe('#id', () => { test('allows lowercase a-z, 0-9, "_" and "-"', () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, id: 'abcdefghijklmnopqrstuvwxyz0123456789_-', }) @@ -35,7 +39,7 @@ describe('#id', () => { test(`doesn't allow uppercase`, () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, id: 'Foo', }) @@ -46,7 +50,7 @@ describe('#id', () => { test(`doesn't allow an empty string`, () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, id: '', }) @@ -59,7 +63,7 @@ describe('#id', () => { (invalidCharacter) => { test(`doesn't allow ${invalidCharacter}`, () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, id: `foo-${invalidCharacter}`, }) @@ -72,7 +76,7 @@ describe('#id', () => { describe('#disabledFeatures', () => { test('is optional', () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, disabledFeatures: undefined, }) @@ -80,7 +84,7 @@ describe('#disabledFeatures', () => { }); test('defaults to an empty array', () => { - const result = spaceSchema.validate({ + const result = spaceBaseSchema.validate({ ...defaultProperties, disabledFeatures: undefined, }); @@ -89,7 +93,7 @@ describe('#disabledFeatures', () => { test('must be an array if provided', () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, disabledFeatures: 'foo', }) @@ -100,7 +104,7 @@ describe('#disabledFeatures', () => { test('allows an array of strings', () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, disabledFeatures: ['foo', 'bar'], }) @@ -109,7 +113,7 @@ describe('#disabledFeatures', () => { test('does not allow an array containing non-string elements', () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, disabledFeatures: ['foo', true], }) @@ -122,7 +126,7 @@ describe('#disabledFeatures', () => { describe('#color', () => { test('is optional', () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, color: undefined, }) @@ -131,7 +135,7 @@ describe('#color', () => { test(`doesn't allow an empty string`, () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, color: '', }) @@ -142,7 +146,7 @@ describe('#color', () => { test(`allows lower case hex color code`, () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, color: '#aabbcc', }) @@ -151,7 +155,7 @@ describe('#color', () => { test(`allows upper case hex color code`, () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, color: '#AABBCC', }) @@ -160,7 +164,7 @@ describe('#color', () => { test(`allows numeric hex color code`, () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, color: '#123456', }) @@ -169,7 +173,7 @@ describe('#color', () => { test(`must start with a hash`, () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, color: '123456', }) @@ -180,7 +184,7 @@ describe('#color', () => { test(`cannot exceed 6 digits following the hash`, () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, color: '1234567', }) @@ -191,7 +195,7 @@ describe('#color', () => { test(`cannot be fewer than 6 digits following the hash`, () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, color: '12345', }) @@ -204,7 +208,7 @@ describe('#color', () => { describe('#imageUrl', () => { test('is optional', () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, imageUrl: undefined, }) @@ -213,7 +217,7 @@ describe('#imageUrl', () => { test(`must start with data:image`, () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, imageUrl: 'notValid', }) @@ -222,7 +226,7 @@ describe('#imageUrl', () => { test(`checking that a valid image is accepted as imageUrl`, () => { expect(() => - spaceSchema.validate({ + spaceBaseSchema.validate({ ...defaultProperties, imageUrl: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTnU1rJkAAAB3klEQVRYR+2WzUrDQBCARzwqehE8ir1WPfgqRRA1bePBXgpe/MGCB9/Aiw+j+ASCB6kotklaEwW1F0WwNSaps9lV69awGzBpDzt8pJP9mXxsmk3ABH2oUEIilJAIJSRCCYlQQiKUkIh4QgY5agZodVjBowFrBktWQzDBU2ykiYaDuQpCYgnl3QunGzM6Z6YF+b5SkcgK1UH/aLbYReQiYL9d9/o+XFop5IU0Vl4uapAzoXC3eEBPw9vH1/wT6Vs2otPSkoH/IZzlzO/TU2vgQm8nl69Hp0H7nZ4OXogLJSSKBIUC3w88n+Ueyfv56fVZnqCQNVnCHbLrkV0Gd2d+GNkglsk438dhaTxloZDutV4wb06Vf40JcWZ2sMttPpE8NaHGeBnzIAhwPXqHseVB11EyLD0hxLUeaYud2a3B0g3k7GyFtrhX7F2RqhC+yV3jgTb2Rqdqf7/kUxYiWBOlTtXxfPJEtc8b5thGb+8AhL4ohnCNqQjZ2T2+K5rnw2M6KwEhKNDSGM3pTdxjhDgLbHkw/v/zw4AiPuSsfMzAiTidKxiF/ArpFqyzK8SMOlkwvloUMYRCtNvZLWeuIomd2Za/WZS4QomjhEQoIRFKSIQSEqGERAyfEH4YDBFQ/ARU6BiBxCAIQQAAAABJRU5ErkJggg==', @@ -230,3 +234,32 @@ describe('#imageUrl', () => { ).not.toThrowError(); }); }); + +describe('#solution', () => { + it('should throw error if solution is defined in serverless offering', () => { + expect(() => + spaceServerlessSchema.validate({ ...defaultProperties, solution: 'search' }) + ).toThrow(); + }); + + it('should not throw error if solution is undefined in classic offering', () => { + expect(() => + spaceBaseSchema.validate({ ...defaultProperties, solution: undefined }, {}) + ).not.toThrow(); + }); + + it('should throw error if solution is invalid in classic offering', () => { + expect(() => spaceBaseSchema.validate({ ...defaultProperties, solution: 'some_value' }, {})) + .toThrowErrorMatchingInlineSnapshot(` + "[solution]: types that failed validation: + - [solution.0]: expected value to equal [security] + - [solution.1]: expected value to equal [observability] + - [solution.2]: expected value to equal [search] + - [solution.3]: expected value to equal [classic]" + `); + + expect(() => + spaceBaseSchema.validate({ ...defaultProperties, solution: ' search ' }, {}) + ).toThrow(); + }); +}); diff --git a/x-pack/plugins/spaces/server/lib/space_schema.ts b/x-pack/plugins/spaces/server/lib/space_schema.ts index b736994c4d13b..cb184e322b5a9 100644 --- a/x-pack/plugins/spaces/server/lib/space_schema.ts +++ b/x-pack/plugins/spaces/server/lib/space_schema.ts @@ -11,7 +11,7 @@ import { MAX_SPACE_INITIALS } from '../../common'; export const SPACE_ID_REGEX = /^[a-z0-9_\-]+$/; -export const spaceSchema = schema.object({ +const spaceSchema = schema.object({ id: schema.string({ validate: (value) => { if (!SPACE_ID_REGEX.test(value)) { @@ -43,3 +43,18 @@ export const spaceSchema = schema.object({ }) ), }); + +const solutionSchema = schema.oneOf([ + schema.literal('security'), + schema.literal('observability'), + schema.literal('search'), + schema.literal('classic'), +]); + +export const getSpaceSchema = (isServerless: boolean) => { + if (isServerless) { + return spaceSchema; + } + + return spaceSchema.extends({ solution: schema.maybe(solutionSchema) }); +}; diff --git a/x-pack/plugins/spaces/server/plugin.ts b/x-pack/plugins/spaces/server/plugin.ts index 9084a74e24265..a20396c3e4695 100644 --- a/x-pack/plugins/spaces/server/plugin.ts +++ b/x-pack/plugins/spaces/server/plugin.ts @@ -125,7 +125,10 @@ export class SpacesPlugin this.hasOnlyDefaultSpace$ = this.config$.pipe(map(({ maxSpaces }) => maxSpaces === 1)); this.log = initializerContext.logger.get(); this.spacesService = new SpacesService(); - this.spacesClientService = new SpacesClientService((message) => this.log.debug(message)); + this.spacesClientService = new SpacesClientService( + (message) => this.log.debug(message), + initializerContext.env.packageInfo.buildFlavor + ); } public setup(core: CoreSetup, plugins: PluginsSetup): SpacesPluginSetup { @@ -168,16 +171,14 @@ export class SpacesPlugin const router = core.http.createRouter(); - initExternalSpacesApi( - { - router, - log: this.log, - getStartServices: core.getStartServices, - getSpacesService, - usageStatsServicePromise, - }, - this.initializerContext.env.packageInfo.buildFlavor - ); + initExternalSpacesApi({ + router, + log: this.log, + getStartServices: core.getStartServices, + getSpacesService, + usageStatsServicePromise, + isServerless: this.initializerContext.env.packageInfo.buildFlavor === 'serverless', + }); initInternalSpacesApi({ router, diff --git a/x-pack/plugins/spaces/server/routes/api/external/copy_to_space.test.ts b/x-pack/plugins/spaces/server/routes/api/external/copy_to_space.test.ts index 7722316799076..8c5782aacd519 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/copy_to_space.test.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/copy_to_space.test.ts @@ -57,7 +57,7 @@ describe('copy to space', () => { createResolveSavedObjectsImportErrorsMock() ); - const clientService = new SpacesClientService(jest.fn()); + const clientService = new SpacesClientService(jest.fn(), 'traditional'); clientService .setup({ config$: Rx.of(spacesConfig) }) .setClientRepositoryFactory(() => savedObjectsRepositoryMock); @@ -85,6 +85,7 @@ describe('copy to space', () => { log, getSpacesService: () => spacesServiceStart, usageStatsServicePromise, + isServerless: false, }); const [[ctsRouteDefinition, ctsRouteHandler], [resolveRouteDefinition, resolveRouteHandler]] = diff --git a/x-pack/plugins/spaces/server/routes/api/external/delete.test.ts b/x-pack/plugins/spaces/server/routes/api/external/delete.test.ts index 09ed757a5df74..99ec34917eb5a 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/delete.test.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/delete.test.ts @@ -42,7 +42,7 @@ describe('Spaces Public API', () => { const coreStart = coreMock.createStart(); - const clientService = new SpacesClientService(jest.fn()); + const clientService = new SpacesClientService(jest.fn(), 'traditional'); clientService .setup({ config$: Rx.of(spacesConfig) }) .setClientRepositoryFactory(() => savedObjectsRepositoryMock); @@ -67,6 +67,7 @@ describe('Spaces Public API', () => { log, getSpacesService: () => spacesServiceStart, usageStatsServicePromise, + isServerless: false, }); const [routeDefinition, routeHandler] = router.delete.mock.calls[0]; diff --git a/x-pack/plugins/spaces/server/routes/api/external/disable_legacy_url_aliases.test.ts b/x-pack/plugins/spaces/server/routes/api/external/disable_legacy_url_aliases.test.ts index ed7c403182ab5..e6f665f817c55 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/disable_legacy_url_aliases.test.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/disable_legacy_url_aliases.test.ts @@ -42,7 +42,7 @@ describe('_disable_legacy_url_aliases', () => { const log = loggingSystemMock.create().get('spaces'); - const clientService = new SpacesClientService(jest.fn()); + const clientService = new SpacesClientService(jest.fn(), 'traditional'); clientService .setup({ config$: Rx.of(spacesConfig) }) .setClientRepositoryFactory(() => savedObjectsRepositoryMock); @@ -70,6 +70,7 @@ describe('_disable_legacy_url_aliases', () => { log, getSpacesService: () => spacesServiceStart, usageStatsServicePromise, + isServerless: false, }); const [routeDefinition, routeHandler] = router.post.mock.calls[0]; diff --git a/x-pack/plugins/spaces/server/routes/api/external/get.test.ts b/x-pack/plugins/spaces/server/routes/api/external/get.test.ts index 34c1ed01e0ce4..938af432b0cfa 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/get.test.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/get.test.ts @@ -41,7 +41,7 @@ describe('GET space', () => { const log = loggingSystemMock.create().get('spaces'); - const clientService = new SpacesClientService(jest.fn()); + const clientService = new SpacesClientService(jest.fn(), 'traditional'); clientService .setup({ config$: Rx.of(spacesConfig) }) .setClientRepositoryFactory(() => savedObjectsRepositoryMock); @@ -66,6 +66,7 @@ describe('GET space', () => { log, getSpacesService: () => spacesServiceStart, usageStatsServicePromise, + isServerless: false, }); return { diff --git a/x-pack/plugins/spaces/server/routes/api/external/get.ts b/x-pack/plugins/spaces/server/routes/api/external/get.ts index ce89aac5fe186..496c3408b7d2e 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/get.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/get.ts @@ -30,7 +30,9 @@ export function initGetSpaceApi(deps: ExternalRouteDeps) { try { const space = await spacesClient.get(spaceId); - return response.ok({ body: space }); + return response.ok({ + body: space, + }); } catch (error) { if (SavedObjectsErrorHelpers.isNotFoundError(error)) { return response.notFound(); diff --git a/x-pack/plugins/spaces/server/routes/api/external/get_all.test.ts b/x-pack/plugins/spaces/server/routes/api/external/get_all.test.ts index aefef389c7d26..a3d4f151c6615 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/get_all.test.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/get_all.test.ts @@ -43,7 +43,7 @@ describe('GET /spaces/space', () => { const log = loggingSystemMock.create().get('spaces'); - const clientService = new SpacesClientService(jest.fn()); + const clientService = new SpacesClientService(jest.fn(), 'traditional'); clientService .setup({ config$: Rx.of(spacesConfig) }) .setClientRepositoryFactory(() => savedObjectsRepositoryMock); @@ -68,6 +68,7 @@ describe('GET /spaces/space', () => { log, getSpacesService: () => spacesServiceStart, usageStatsServicePromise, + isServerless: false, }); return { diff --git a/x-pack/plugins/spaces/server/routes/api/external/get_shareable_references.test.ts b/x-pack/plugins/spaces/server/routes/api/external/get_shareable_references.test.ts index c9ea0d71c11b7..8c9c60f78f461 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/get_shareable_references.test.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/get_shareable_references.test.ts @@ -42,7 +42,7 @@ describe('get shareable references', () => { const { savedObjects, savedObjectsClient } = createMockSavedObjectsService(spaces); coreStart.savedObjects = savedObjects; - const clientService = new SpacesClientService(jest.fn()); + const clientService = new SpacesClientService(jest.fn(), 'traditional'); clientService .setup({ config$: Rx.of(spacesConfig) }) .setClientRepositoryFactory(() => savedObjectsRepositoryMock); @@ -66,6 +66,7 @@ describe('get shareable references', () => { log, getSpacesService: () => spacesServiceStart, usageStatsServicePromise, + isServerless: false, }); const [[getShareableReferences, getShareableReferencesRouteHandler]] = router.post.mock.calls; diff --git a/x-pack/plugins/spaces/server/routes/api/external/index.ts b/x-pack/plugins/spaces/server/routes/api/external/index.ts index 290807f9b5f4d..6b919b6898709 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/index.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/index.ts @@ -4,8 +4,6 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - -import type { BuildFlavor } from '@kbn/config/src/types'; import type { CoreSetup, Logger } from '@kbn/core/server'; import { initCopyToSpacesApi } from './copy_to_space'; @@ -27,9 +25,10 @@ export interface ExternalRouteDeps { getSpacesService: () => SpacesServiceStart; usageStatsServicePromise: Promise; log: Logger; + isServerless: boolean; } -export function initExternalSpacesApi(deps: ExternalRouteDeps, buildFlavor: BuildFlavor) { +export function initExternalSpacesApi(deps: ExternalRouteDeps) { // These two routes are always registered, internal in serverless by default initGetSpaceApi(deps); initGetAllSpacesApi(deps); @@ -37,7 +36,7 @@ export function initExternalSpacesApi(deps: ExternalRouteDeps, buildFlavor: Buil // In the serverless environment, Spaces are enabled but are effectively hidden from the user. We // do not support more than 1 space: the default space. These HTTP APIs for creating, deleting, // updating, and manipulating saved objects across multiple spaces are not needed. - if (buildFlavor !== 'serverless') { + if (!deps.isServerless) { initPutSpacesApi(deps); initDeleteSpacesApi(deps); initPostSpacesApi(deps); diff --git a/x-pack/plugins/spaces/server/routes/api/external/post.test.ts b/x-pack/plugins/spaces/server/routes/api/external/post.test.ts index 88c763f31c0be..b36a3619a48e0 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/post.test.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/post.test.ts @@ -42,7 +42,7 @@ describe('Spaces Public API', () => { const log = loggingSystemMock.create().get('spaces'); - const clientService = new SpacesClientService(jest.fn()); + const clientService = new SpacesClientService(jest.fn(), 'traditional'); clientService .setup({ config$: Rx.of(spacesConfig) }) .setClientRepositoryFactory(() => savedObjectsRepositoryMock); @@ -67,6 +67,7 @@ describe('Spaces Public API', () => { log, getSpacesService: () => spacesServiceStart, usageStatsServicePromise, + isServerless: false, }); const [routeDefinition, routeHandler] = router.post.mock.calls[0]; diff --git a/x-pack/plugins/spaces/server/routes/api/external/post.ts b/x-pack/plugins/spaces/server/routes/api/external/post.ts index d8091a0140e00..34a9c7f854dad 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/post.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/post.ts @@ -11,17 +11,17 @@ import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import type { ExternalRouteDeps } from '.'; import { wrapError } from '../../../lib/errors'; -import { spaceSchema } from '../../../lib/space_schema'; +import { getSpaceSchema } from '../../../lib/space_schema'; import { createLicensedRouteHandler } from '../../lib'; export function initPostSpacesApi(deps: ExternalRouteDeps) { - const { router, log, getSpacesService } = deps; + const { router, log, getSpacesService, isServerless } = deps; router.post( { path: '/api/spaces/space', validate: { - body: spaceSchema, + body: getSpaceSchema(isServerless), }, }, createLicensedRouteHandler(async (context, request, response) => { diff --git a/x-pack/plugins/spaces/server/routes/api/external/put.test.ts b/x-pack/plugins/spaces/server/routes/api/external/put.test.ts index 5e1e6077a758e..2141e369507b9 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/put.test.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/put.test.ts @@ -42,7 +42,7 @@ describe('PUT /api/spaces/space', () => { const log = loggingSystemMock.create().get('spaces'); - const clientService = new SpacesClientService(jest.fn()); + const clientService = new SpacesClientService(jest.fn(), 'traditional'); clientService .setup({ config$: Rx.of(spacesConfig) }) .setClientRepositoryFactory(() => savedObjectsRepositoryMock); @@ -67,6 +67,7 @@ describe('PUT /api/spaces/space', () => { log, getSpacesService: () => spacesServiceStart, usageStatsServicePromise, + isServerless: false, }); const [routeDefinition, routeHandler] = router.put.mock.calls[0]; diff --git a/x-pack/plugins/spaces/server/routes/api/external/put.ts b/x-pack/plugins/spaces/server/routes/api/external/put.ts index 753ec8e028925..7d0c255392ee4 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/put.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/put.ts @@ -11,11 +11,11 @@ import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import type { ExternalRouteDeps } from '.'; import type { Space } from '../../../../common'; import { wrapError } from '../../../lib/errors'; -import { spaceSchema } from '../../../lib/space_schema'; +import { getSpaceSchema } from '../../../lib/space_schema'; import { createLicensedRouteHandler } from '../../lib'; export function initPutSpacesApi(deps: ExternalRouteDeps) { - const { router, getSpacesService } = deps; + const { router, getSpacesService, isServerless } = deps; router.put( { @@ -24,7 +24,7 @@ export function initPutSpacesApi(deps: ExternalRouteDeps) { params: schema.object({ id: schema.string(), }), - body: spaceSchema, + body: getSpaceSchema(isServerless), }, }, createLicensedRouteHandler(async (context, request, response) => { diff --git a/x-pack/plugins/spaces/server/routes/api/external/update_objects_spaces.test.ts b/x-pack/plugins/spaces/server/routes/api/external/update_objects_spaces.test.ts index 195db8148a378..874b5d4284958 100644 --- a/x-pack/plugins/spaces/server/routes/api/external/update_objects_spaces.test.ts +++ b/x-pack/plugins/spaces/server/routes/api/external/update_objects_spaces.test.ts @@ -43,7 +43,7 @@ describe('update_objects_spaces', () => { const { savedObjects, savedObjectsClient } = createMockSavedObjectsService(spaces); coreStart.savedObjects = savedObjects; - const clientService = new SpacesClientService(jest.fn()); + const clientService = new SpacesClientService(jest.fn(), 'traditional'); clientService .setup({ config$: Rx.of(spacesConfig) }) .setClientRepositoryFactory(() => savedObjectsRepositoryMock); @@ -67,6 +67,7 @@ describe('update_objects_spaces', () => { log, getSpacesService: () => spacesServiceStart, usageStatsServicePromise, + isServerless: false, }); const [[updateObjectsSpaces, updateObjectsSpacesRouteHandler]] = router.post.mock.calls; diff --git a/x-pack/plugins/spaces/server/routes/api/internal/get_content_summary.test.ts b/x-pack/plugins/spaces/server/routes/api/internal/get_content_summary.test.ts index 8f316d12209ba..09fdbe7896761 100644 --- a/x-pack/plugins/spaces/server/routes/api/internal/get_content_summary.test.ts +++ b/x-pack/plugins/spaces/server/routes/api/internal/get_content_summary.test.ts @@ -45,7 +45,7 @@ describe('GET /internal/spaces/{spaceId}/content_summary', () => { const savedObjectsRepositoryMock = createMockSavedObjectsRepository(spacesSavedObjects); - const clientService = new SpacesClientService(jest.fn()); + const clientService = new SpacesClientService(jest.fn(), 'traditional'); clientService .setup({ config$: Rx.of(spacesConfig) }) .setClientRepositoryFactory(() => savedObjectsRepositoryMock); diff --git a/x-pack/plugins/spaces/server/saved_objects/mappings.ts b/x-pack/plugins/spaces/server/saved_objects/mappings.ts index 90d514e9fd10c..6f4313c3b1ed5 100644 --- a/x-pack/plugins/spaces/server/saved_objects/mappings.ts +++ b/x-pack/plugins/spaces/server/saved_objects/mappings.ts @@ -19,6 +19,9 @@ export const SpacesSavedObjectMappings = deepFreeze({ }, }, }, + solution: { + type: 'keyword', + }, }, } as const); diff --git a/x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts b/x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts index b86bbf58f065c..1cdfa00d63238 100644 --- a/x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts +++ b/x-pack/plugins/spaces/server/saved_objects/saved_objects_service.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { schema } from '@kbn/config-schema'; import type { CoreSetup } from '@kbn/core/server'; import { SpacesSavedObjectMappings, UsageStatsMappings } from './mappings'; @@ -30,6 +31,30 @@ export class SpacesSavedObjectsService { migrations: { '6.6.0': spaceMigrations.migrateTo660, }, + modelVersions: { + 1: { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + solution: { type: 'keyword' }, + }, + }, + ], + schemas: { + create: SpacesSavedObjectSchemas['8.8.0'].extends({ + solution: schema.maybe( + schema.oneOf([ + schema.literal('security'), + schema.literal('observability'), + schema.literal('search'), + schema.literal('classic'), + ]) + ), + }), + }, + }, + }, }); core.savedObjects.registerType({ diff --git a/x-pack/plugins/spaces/server/spaces_client/spaces_client.test.ts b/x-pack/plugins/spaces/server/spaces_client/spaces_client.test.ts index 0f689cd492e11..600f6d1aa316c 100644 --- a/x-pack/plugins/spaces/server/spaces_client/spaces_client.test.ts +++ b/x-pack/plugins/spaces/server/spaces_client/spaces_client.test.ts @@ -42,6 +42,7 @@ describe('#getAll', () => { imageUrl: 'go-bots/predates/transformers', disabledFeatures: [], _reserved: true, + solution: 'search', bar: 'foo-bar', // an extra attribute that will be ignored during conversion }, }, @@ -80,6 +81,7 @@ describe('#getAll', () => { initials: 'FB', imageUrl: 'go-bots/predates/transformers', disabledFeatures: [], + solution: 'search', _reserved: true, }, { @@ -105,7 +107,13 @@ describe('#getAll', () => { } as any); const mockConfig = createMockConfig(); - const client = new SpacesClient(mockDebugLogger, mockConfig, mockCallWithRequestRepository, []); + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); const actualSpaces = await client.getAll(); expect(actualSpaces).toEqual(expectedSpaces); @@ -117,11 +125,46 @@ describe('#getAll', () => { }); }); + test('strips solution property in serverless build', async () => { + const mockDebugLogger = createMockDebugLogger(); + const [SOWithSolution] = savedObjects; + const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); + mockCallWithRequestRepository.find.mockResolvedValue({ + saved_objects: [SOWithSolution], + } as any); + const mockConfig = createMockConfig(); + + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'serverless' + ); + const [actualSpace] = await client.getAll(); + const [{ solution, ...expectedSpace }] = expectedSpaces; + + expect(actualSpace.solution).toBeUndefined(); + expect(actualSpace).toEqual(expectedSpace); + expect(mockCallWithRequestRepository.find).toHaveBeenCalledWith({ + type: 'space', + page: 1, + perPage: mockConfig.maxSpaces, + sortField: 'name.keyword', + }); + }); + test(`throws Boom.badRequest when an invalid purpose is provided'`, async () => { const mockDebugLogger = createMockDebugLogger(); const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); const mockConfig = createMockConfig(); - const client = new SpacesClient(mockDebugLogger, mockConfig, mockCallWithRequestRepository, []); + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); await expect( client.getAll({ purpose: 'invalid_purpose' as GetAllSpacesPurpose }) ).rejects.toThrowErrorMatchingInlineSnapshot(`"unsupported space purpose: invalid_purpose"`); @@ -162,13 +205,64 @@ describe('#get', () => { const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); mockCallWithRequestRepository.get.mockResolvedValue(savedObject); - const client = new SpacesClient(mockDebugLogger, mockConfig, mockCallWithRequestRepository, []); + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); const id = savedObject.id; const actualSpace = await client.get(id); expect(actualSpace).toEqual(expectedSpace); expect(mockCallWithRequestRepository.get).toHaveBeenCalledWith('space', id); }); + + test('strips solution property in serverless build', async () => { + const mockDebugLogger = createMockDebugLogger(); + const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); + mockCallWithRequestRepository.get.mockResolvedValue({ + ...savedObject, + attributes: { ...(savedObject.attributes as Record), solution: 'search' }, + }); + const mockConfig = createMockConfig(); + + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'serverless' + ); + const id = savedObject.id; + const actualSpace = await client.get(id); + + expect(actualSpace.solution).toBeUndefined(); + expect(actualSpace).toEqual(expectedSpace); + }); + + test(`doesn't strip solution property in traditional build`, async () => { + const mockDebugLogger = createMockDebugLogger(); + const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); + mockCallWithRequestRepository.get.mockResolvedValue({ + ...savedObject, + attributes: { ...(savedObject.attributes as Record), solution: 'search' }, + }); + const mockConfig = createMockConfig(); + + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); + const id = savedObject.id; + const actualSpace = await client.get(id); + + expect(actualSpace).toEqual({ ...expectedSpace, solution: 'search' }); + }); }); describe('#create', () => { @@ -219,7 +313,13 @@ describe('#create', () => { allowFeatureVisibility: true, }); - const client = new SpacesClient(mockDebugLogger, mockConfig, mockCallWithRequestRepository, []); + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); const actualSpace = await client.create(spaceToCreate); @@ -249,7 +349,13 @@ describe('#create', () => { allowFeatureVisibility: true, }); - const client = new SpacesClient(mockDebugLogger, mockConfig, mockCallWithRequestRepository, []); + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); await expect(client.create(spaceToCreate)).rejects.toThrowErrorMatchingInlineSnapshot( `"Unable to create Space, this exceeds the maximum number of spaces set by the xpack.spaces.maxSpaces setting"` @@ -263,6 +369,93 @@ describe('#create', () => { expect(mockCallWithRequestRepository.create).not.toHaveBeenCalled(); }); + test('throws bad request when solution property is provided in serverless build', async () => { + const maxSpaces = 5; + const mockDebugLogger = createMockDebugLogger(); + const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); + mockCallWithRequestRepository.create.mockResolvedValue(savedObject); + mockCallWithRequestRepository.find.mockResolvedValue({ + total: maxSpaces - 1, + } as any); + + const mockConfig = createMockConfig({ + enabled: true, + maxSpaces, + allowFeatureVisibility: true, + }); + + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'serverless' + ); + + await expect( + client.create({ ...spaceToCreate, solution: undefined }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unable to create Space, solution property is forbidden in serverless"` + ); + + await expect( + client.create({ ...spaceToCreate, solution: 'search' }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unable to create Space, solution property is forbidden in serverless"` + ); + + expect(mockCallWithRequestRepository.find).toHaveBeenCalledWith({ + type: 'space', + page: 1, + perPage: 0, + }); + expect(mockCallWithRequestRepository.create).not.toHaveBeenCalled(); + }); + + test('creates space when solution property is provided in traditional build', async () => { + const maxSpaces = 5; + const mockDebugLogger = createMockDebugLogger(); + const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); + mockCallWithRequestRepository.create.mockResolvedValue({ + ...savedObject, + attributes: { ...(savedObject.attributes as Record), solution: 'search' }, + }); + mockCallWithRequestRepository.find.mockResolvedValue({ + total: maxSpaces - 1, + } as any); + + const mockConfig = createMockConfig({ + enabled: true, + maxSpaces, + allowFeatureVisibility: true, + }); + + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); + + const actualSpace = await client.create({ ...spaceToCreate, solution: 'search' }); + + expect(actualSpace).toEqual({ ...expectedReturnedSpace, solution: 'search' }); + + expect(mockCallWithRequestRepository.find).toHaveBeenCalledWith({ + type: 'space', + page: 1, + perPage: 0, + }); + expect(mockCallWithRequestRepository.create).toHaveBeenCalledWith( + 'space', + { ...attributes, solution: 'search' }, + { + id, + } + ); + }); + describe('when config.allowFeatureVisibility is disabled', () => { test(`creates space without disabledFeatures`, async () => { const maxSpaces = 5; @@ -283,7 +476,8 @@ describe('#create', () => { mockDebugLogger, mockConfig, mockCallWithRequestRepository, - [] + [], + 'traditional' ); const actualSpace = await client.create(spaceToCreate); @@ -318,7 +512,8 @@ describe('#create', () => { mockDebugLogger, mockConfig, mockCallWithRequestRepository, - [] + [], + 'traditional' ); await expect( @@ -377,7 +572,13 @@ describe('#update', () => { const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); mockCallWithRequestRepository.get.mockResolvedValue(savedObject); - const client = new SpacesClient(mockDebugLogger, mockConfig, mockCallWithRequestRepository, []); + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); const id = savedObject.id; const actualSpace = await client.update(id, spaceToUpdate); @@ -386,6 +587,87 @@ describe('#update', () => { expect(mockCallWithRequestRepository.get).toHaveBeenCalledWith('space', id); }); + test('throws bad request when solution property is provided in serverless build', async () => { + const mockDebugLogger = createMockDebugLogger(); + const mockConfig = createMockConfig(); + const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); + mockCallWithRequestRepository.get.mockResolvedValue(savedObject); + + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'serverless' + ); + const id = savedObject.id; + + await expect( + client.update(id, { ...spaceToUpdate, solution: undefined }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unable to update Space, solution property is forbidden in serverless"` + ); + + await expect( + client.update(id, { ...spaceToUpdate, solution: 'search' }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unable to update Space, solution property is forbidden in serverless"` + ); + + expect(mockCallWithRequestRepository.update).not.toHaveBeenCalled(); + + expect(mockCallWithRequestRepository.get).not.toHaveBeenCalled(); + }); + + test('throws bad request when solution property is undefined in traditional build', async () => { + const mockDebugLogger = createMockDebugLogger(); + const mockConfig = createMockConfig(); + const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); + mockCallWithRequestRepository.get.mockResolvedValue(savedObject); + + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); + const id = savedObject.id; + + await expect( + client.update(id, { ...spaceToUpdate, solution: undefined }) + ).rejects.toThrowErrorMatchingInlineSnapshot( + `"Unable to update Space, solution property cannot be empty"` + ); + + expect(mockCallWithRequestRepository.update).not.toHaveBeenCalled(); + + expect(mockCallWithRequestRepository.get).not.toHaveBeenCalled(); + }); + + test('updates space with solution property using callWithRequestRepository in traditional build', async () => { + const mockDebugLogger = createMockDebugLogger(); + const mockConfig = createMockConfig(); + const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); + mockCallWithRequestRepository.get.mockResolvedValue(savedObject); + + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); + const id = savedObject.id; + await client.update(id, { ...spaceToUpdate, solution: 'search' }); + + expect(mockCallWithRequestRepository.update).toHaveBeenCalledWith('space', id, { + ...attributes, + solution: 'search', + }); + expect(mockCallWithRequestRepository.get).toHaveBeenCalledWith('space', id); + }); + describe('when config.allowFeatureVisibility is disabled', () => { test(`updates space without disabledFeatures`, async () => { const mockDebugLogger = createMockDebugLogger(); @@ -401,7 +683,8 @@ describe('#update', () => { mockDebugLogger, mockConfig, mockCallWithRequestRepository, - [] + [], + 'traditional' ); const id = savedObject.id; const actualSpace = await client.update(id, spaceToUpdate); @@ -425,7 +708,8 @@ describe('#update', () => { mockDebugLogger, mockConfig, mockCallWithRequestRepository, - [] + [], + 'traditional' ); const id = savedObject.id; @@ -473,7 +757,13 @@ describe('#delete', () => { const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); mockCallWithRequestRepository.get.mockResolvedValue(reservedSavedObject); - const client = new SpacesClient(mockDebugLogger, mockConfig, mockCallWithRequestRepository, []); + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); await expect(client.delete(id)).rejects.toThrowErrorMatchingInlineSnapshot( `"The foo space cannot be deleted because it is reserved."` @@ -488,7 +778,13 @@ describe('#delete', () => { const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); mockCallWithRequestRepository.get.mockResolvedValue(notReservedSavedObject); - const client = new SpacesClient(mockDebugLogger, mockConfig, mockCallWithRequestRepository, []); + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); await client.delete(id); @@ -504,7 +800,13 @@ describe('#disableLegacyUrlAliases', () => { const mockConfig = createMockConfig(); const mockCallWithRequestRepository = savedObjectsRepositoryMock.create(); - const client = new SpacesClient(mockDebugLogger, mockConfig, mockCallWithRequestRepository, []); + const client = new SpacesClient( + mockDebugLogger, + mockConfig, + mockCallWithRequestRepository, + [], + 'traditional' + ); const aliases = [ { targetSpace: 'space1', targetType: 'foo', sourceId: '123' }, { targetSpace: 'space2', targetType: 'bar', sourceId: '456' }, diff --git a/x-pack/plugins/spaces/server/spaces_client/spaces_client.ts b/x-pack/plugins/spaces/server/spaces_client/spaces_client.ts index cc4058ad22485..536765e8dac47 100644 --- a/x-pack/plugins/spaces/server/spaces_client/spaces_client.ts +++ b/x-pack/plugins/spaces/server/spaces_client/spaces_client.ts @@ -7,6 +7,7 @@ import Boom from '@hapi/boom'; +import type { BuildFlavor } from '@kbn/config/src/types'; import type { ISavedObjectsPointInTimeFinder, ISavedObjectsRepository, @@ -80,12 +81,17 @@ export interface ISpacesClient { * Client for interacting with spaces. */ export class SpacesClient implements ISpacesClient { + private isServerless = false; + constructor( private readonly debugLogger: (message: string) => void, private readonly config: ConfigType, private readonly repository: ISavedObjectsRepository, - private readonly nonGlobalTypeNames: string[] - ) {} + private readonly nonGlobalTypeNames: string[], + private readonly buildFlavour: BuildFlavor + ) { + this.isServerless = this.buildFlavour === 'serverless'; + } public async getAll(options: v1.GetAllSpacesOptions = {}): Promise { const { purpose = DEFAULT_PURPOSE } = options; @@ -130,10 +136,19 @@ export class SpacesClient implements ISpacesClient { ); } + if (this.isServerless && space.hasOwnProperty('solution')) { + throw Boom.badRequest('Unable to create Space, solution property is forbidden in serverless'); + } + + if (space.hasOwnProperty('solution') && !space.solution) { + throw Boom.badRequest('Unable to create Space, solution property cannot be empty'); + } + this.debugLogger(`SpacesClient.create(), using RBAC. Attempting to create space`); const id = space.id; const attributes = this.generateSpaceAttributes(space); + const createdSavedObject = await this.repository.create('space', attributes, { id }); this.debugLogger(`SpacesClient.create(), created space object`); @@ -148,6 +163,14 @@ export class SpacesClient implements ISpacesClient { ); } + if (this.isServerless && space.hasOwnProperty('solution')) { + throw Boom.badRequest('Unable to update Space, solution property is forbidden in serverless'); + } + + if (space.hasOwnProperty('solution') && !space.solution) { + throw Boom.badRequest('Unable to update Space, solution property cannot be empty'); + } + const attributes = this.generateSpaceAttributes(space); await this.repository.update('space', id, attributes); const updatedSavedObject = await this.repository.get('space', id); @@ -181,7 +204,7 @@ export class SpacesClient implements ISpacesClient { await this.repository.bulkUpdate(objectsToUpdate); } - private transformSavedObjectToSpace(savedObject: SavedObject): v1.Space { + private transformSavedObjectToSpace = (savedObject: SavedObject): v1.Space => { return { id: savedObject.id, name: savedObject.attributes.name ?? '', @@ -191,10 +214,11 @@ export class SpacesClient implements ISpacesClient { imageUrl: savedObject.attributes.imageUrl, disabledFeatures: savedObject.attributes.disabledFeatures ?? [], _reserved: savedObject.attributes._reserved, + ...(!this.isServerless ? { solution: savedObject.attributes.solution } : {}), } as v1.Space; - } + }; - private generateSpaceAttributes(space: v1.Space) { + private generateSpaceAttributes = (space: v1.Space) => { return { name: space.name, description: space.description, @@ -202,6 +226,7 @@ export class SpacesClient implements ISpacesClient { initials: space.initials, imageUrl: space.imageUrl, disabledFeatures: space.disabledFeatures, + ...(!this.isServerless && space.solution ? { solution: space.solution } : {}), }; - } + }; } diff --git a/x-pack/plugins/spaces/server/spaces_client/spaces_client_service.test.ts b/x-pack/plugins/spaces/server/spaces_client/spaces_client_service.test.ts index 455387a816bd5..cedcdec858e55 100644 --- a/x-pack/plugins/spaces/server/spaces_client/spaces_client_service.test.ts +++ b/x-pack/plugins/spaces/server/spaces_client/spaces_client_service.test.ts @@ -20,7 +20,7 @@ const debugLogger = jest.fn(); describe('SpacesClientService', () => { describe('#setup', () => { it('allows a single repository factory to be set', () => { - const service = new SpacesClientService(debugLogger); + const service = new SpacesClientService(debugLogger, 'traditional'); const setup = service.setup({ config$: Rx.of(spacesConfig) }); const repositoryFactory = jest.fn(); @@ -32,7 +32,7 @@ describe('SpacesClientService', () => { }); it('allows a single client wrapper to be set', () => { - const service = new SpacesClientService(debugLogger); + const service = new SpacesClientService(debugLogger, 'traditional'); const setup = service.setup({ config$: Rx.of(spacesConfig) }); const clientWrapper = jest.fn(); @@ -46,7 +46,7 @@ describe('SpacesClientService', () => { describe('#start', () => { it('throws if config is not available', () => { - const service = new SpacesClientService(debugLogger); + const service = new SpacesClientService(debugLogger, 'traditional'); service.setup({ config$: new Rx.Observable() }); const coreStart = coreMock.createStart(); const start = service.start(coreStart); @@ -60,7 +60,7 @@ describe('SpacesClientService', () => { describe('without a custom repository factory or wrapper', () => { it('returns an instance of the spaces client using the scoped repository', () => { - const service = new SpacesClientService(debugLogger); + const service = new SpacesClientService(debugLogger, 'traditional'); service.setup({ config$: Rx.of(spacesConfig) }); const coreStart = coreMock.createStart(); @@ -78,7 +78,7 @@ describe('SpacesClientService', () => { }); it('uses the custom repository factory when set', () => { - const service = new SpacesClientService(debugLogger); + const service = new SpacesClientService(debugLogger, 'traditional'); const setup = service.setup({ config$: Rx.of(spacesConfig) }); const customRepositoryFactory = jest.fn(); @@ -98,7 +98,7 @@ describe('SpacesClientService', () => { }); it('wraps the client in the wrapper when registered', () => { - const service = new SpacesClientService(debugLogger); + const service = new SpacesClientService(debugLogger, 'traditional'); const setup = service.setup({ config$: Rx.of(spacesConfig) }); const wrapper = Symbol() as unknown as ISpacesClient; @@ -123,7 +123,7 @@ describe('SpacesClientService', () => { }); it('wraps the client in the wrapper when registered, using the custom repository factory when configured', () => { - const service = new SpacesClientService(debugLogger); + const service = new SpacesClientService(debugLogger, 'traditional'); const setup = service.setup({ config$: Rx.of(spacesConfig) }); const customRepositoryFactory = jest.fn(); diff --git a/x-pack/plugins/spaces/server/spaces_client/spaces_client_service.ts b/x-pack/plugins/spaces/server/spaces_client/spaces_client_service.ts index 8a6c0eaab0d3b..26d4fef85ea6d 100644 --- a/x-pack/plugins/spaces/server/spaces_client/spaces_client_service.ts +++ b/x-pack/plugins/spaces/server/spaces_client/spaces_client_service.ts @@ -7,6 +7,7 @@ import type { Observable } from 'rxjs'; +import type { BuildFlavor } from '@kbn/config/src/types'; import type { CoreStart, ISavedObjectsRepository, @@ -72,7 +73,10 @@ export class SpacesClientService { private clientWrapper?: SpacesClientWrapper; - constructor(private readonly debugLogger: (message: string) => void) {} + constructor( + private readonly debugLogger: (message: string) => void, + private readonly buildFlavour: BuildFlavor + ) {} public setup({ config$ }: SetupDeps): SpacesClientServiceSetup { config$.subscribe((nextConfig) => { @@ -117,7 +121,8 @@ export class SpacesClientService { this.debugLogger, this.config, this.repositoryFactory!(request, coreStart.savedObjects), - nonGlobalTypeNames + nonGlobalTypeNames, + this.buildFlavour ); if (this.clientWrapper) { return this.clientWrapper(request, baseClient); diff --git a/x-pack/plugins/spaces/server/spaces_service/spaces_service.test.ts b/x-pack/plugins/spaces/server/spaces_service/spaces_service.test.ts index 694fb5b69e46a..8222b43018b2e 100644 --- a/x-pack/plugins/spaces/server/spaces_service/spaces_service.test.ts +++ b/x-pack/plugins/spaces/server/spaces_service/spaces_service.test.ts @@ -69,7 +69,7 @@ const createService = (serverBasePath: string = '') => { basePath: httpSetup.basePath, }); - const spacesClientService = new SpacesClientService(jest.fn()); + const spacesClientService = new SpacesClientService(jest.fn(), 'traditional'); spacesClientService.setup({ config$: Rx.of(spacesConfig), }); diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index a194bc656b28b..f73cbc46de222 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -5062,27 +5062,15 @@ "kbn-esql-validation-autocomplete.esql.definition.orDoc": "ou", "kbn-esql-validation-autocomplete.esql.definition.rlikeDoc": "Filtrer les données en fonction des expressions régulières des chaînes", "kbn-esql-validation-autocomplete.esql.definition.subtractDoc": "Subtract (-)", - "kbn-esql-validation-autocomplete.esql.definitions.absDoc": "Renvoie la valeur absolue.", - "kbn-esql-validation-autocomplete.esql.definitions.acosDoc": "Fonction trigonométrique cosinus inverse", "kbn-esql-validation-autocomplete.esql.definitions.appendSeparatorDoc": "Le ou les caractères qui séparent les champs ajoutés. A pour valeur par défaut une chaîne vide (\"\").", "kbn-esql-validation-autocomplete.esql.definitions.asDoc": "En tant que", - "kbn-esql-validation-autocomplete.esql.definitions.asinDoc": "Fonction trigonométrique sinus inverse", - "kbn-esql-validation-autocomplete.esql.definitions.atan2Doc": "L'angle entre l'axe positif des x et le rayon allant de l'origine au point (x , y) dans le plan cartésien", - "kbn-esql-validation-autocomplete.esql.definitions.atanDoc": "Fonction trigonométrique tangente inverse", "kbn-esql-validation-autocomplete.esql.definitions.autoBucketDoc": "Groupement automatique des dates en fonction d'une plage et d'un compartiment cible donnés.", "kbn-esql-validation-autocomplete.esql.definitions.avgDoc": "Renvoie la moyenne des valeurs dans un champ", "kbn-esql-validation-autocomplete.esql.definitions.byDoc": "Par", - "kbn-esql-validation-autocomplete.esql.definitions.caseDoc": "Accepte les paires de conditions et de valeurs. La fonction renvoie la valeur correspondant à la première condition évaluée à `true` (vraie). Si le nombre d'arguments est impair, le dernier argument est la valeur par défaut qui est renvoyée si aucune condition ne correspond.", "kbn-esql-validation-autocomplete.esql.definitions.ccqAnyDoc": "L'enrichissement a lieu sur n'importe quel cluster", "kbn-esql-validation-autocomplete.esql.definitions.ccqCoordinatorDoc": "L'enrichissement a lieu sur le cluster de coordination qui reçoit une requête ES|QL", "kbn-esql-validation-autocomplete.esql.definitions.ccqModeDoc": "Mode de requête inter-clusters", "kbn-esql-validation-autocomplete.esql.definitions.ccqRemoteDoc": "L'enrichissement a lieu sur le cluster qui héberge l'index cible.", - "kbn-esql-validation-autocomplete.esql.definitions.ceilDoc": "Arrondir un nombre à l'entier supérieur.", - "kbn-esql-validation-autocomplete.esql.definitions.cidrMatchDoc": "La fonction utilise un premier paramètre de type adresse IP, puis un ou plusieurs paramètres évalués en fonction d'une spécification CIDR.", - "kbn-esql-validation-autocomplete.esql.definitions.coalesceDoc": "Renvoie la première valeur non nulle.", - "kbn-esql-validation-autocomplete.esql.definitions.concatDoc": "Concatène deux ou plusieurs chaînes.", - "kbn-esql-validation-autocomplete.esql.definitions.cosDoc": "Fonction trigonométrique cosinus", - "kbn-esql-validation-autocomplete.esql.definitions.coshDoc": "Fonction hyperbolique cosinus", "kbn-esql-validation-autocomplete.esql.definitions.countDistinctDoc": "Renvoie le décompte des valeurs distinctes dans un champ.", "kbn-esql-validation-autocomplete.esql.definitions.countDoc": "Renvoie le décompte des valeurs dans un champ.", "kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.day": "Jour", @@ -5101,87 +5089,29 @@ "kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.weeks": "Semaines (pluriel)", "kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.year": "An", "kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.years": "Ans (pluriel)", - "kbn-esql-validation-autocomplete.esql.definitions.dateExtractDoc": "Extrait des parties d'une date, telles que l'année, le mois, le jour, l'heure. Les types de champs pris en charge sont ceux fournis par la fonction \"java.time.temporal.ChronoField\"", - "kbn-esql-validation-autocomplete.esql.definitions.dateFormatDoc": "Renvoie une représentation sous forme de chaîne d'une date dans le format fourni. Si aucun format n'est indiqué, le format \"yyyy-MM-dd'T'HH:mm:ss.SSSZ\" est utilisé.", - "kbn-esql-validation-autocomplete.esql.definitions.dateParseDoc": "Analyser les dates à partir de chaînes.", - "kbn-esql-validation-autocomplete.esql.definitions.dateTruncDoc": "Arrondit une date à l'intervalle le plus proche. Les intervalles peuvent être exprimés à l'aide de la syntaxe littérale timespan.", "kbn-esql-validation-autocomplete.esql.definitions.dissectDoc": "Extrait de multiples valeurs de chaîne à partir d'une entrée de chaîne unique, suivant un modèle", "kbn-esql-validation-autocomplete.esql.definitions.dropDoc": "Supprime les colonnes", - "kbn-esql-validation-autocomplete.esql.definitions.eDoc": "Nombre d'Euler.", - "kbn-esql-validation-autocomplete.esql.definitions.endsWithDoc": "Renvoie une valeur booléenne qui indique si une chaîne de mots-clés se termine par une autre chaîne :", "kbn-esql-validation-autocomplete.esql.definitions.enrichDoc": "Enrichissez le tableau à l'aide d'un autre tableau. Avant de pouvoir utiliser l'enrichissement, vous devez créer et exécuter une politique d'enrichissement.", "kbn-esql-validation-autocomplete.esql.definitions.evalDoc": "Calcule une expression et place la valeur résultante dans un champ de résultats de recherche.", - "kbn-esql-validation-autocomplete.esql.definitions.floorDoc": "Arrondir un nombre à l'entier inférieur.", "kbn-esql-validation-autocomplete.esql.definitions.fromDoc": "Récupère les données à partir d'un ou plusieurs flux de données, index ou alias. Dans une requête ou une sous-requête, vous devez utiliser d'abord la commande from, et cette dernière ne nécessite pas de barre verticale au début. Par exemple, pour récupérer des données d'un index :", - "kbn-esql-validation-autocomplete.esql.definitions.greatestDoc": "Renvoie la valeur maximale de plusieurs colonnes.", "kbn-esql-validation-autocomplete.esql.definitions.grokDoc": "Extrait de multiples valeurs de chaîne à partir d'une entrée de chaîne unique, suivant un modèle", "kbn-esql-validation-autocomplete.esql.definitions.keepDoc": "Réarrange les champs dans le tableau d'entrée en appliquant les clauses \"KEEP\" dans les champs", - "kbn-esql-validation-autocomplete.esql.definitions.leastDoc": "Renvoie la valeur minimale de plusieurs colonnes.", - "kbn-esql-validation-autocomplete.esql.definitions.leftDoc": "Renvoyer la sous-chaîne qui extrait la longueur des caractères de la chaîne en partant de la gauche.", - "kbn-esql-validation-autocomplete.esql.definitions.lengthDoc": "Renvoie la longueur des caractères d'une chaîne.", "kbn-esql-validation-autocomplete.esql.definitions.limitDoc": "Renvoie les premiers résultats de recherche, dans l'ordre de recherche, en fonction de la \"limite\" spécifiée.", - "kbn-esql-validation-autocomplete.esql.definitions.log10Doc": "Renvoie le log de base 10.", - "kbn-esql-validation-autocomplete.esql.definitions.logDoc": "La fonction scalaire log(based, value) renvoie le logarithme d'une valeur pour une base spécifique, comme défini dans l'argument", - "kbn-esql-validation-autocomplete.esql.definitions.ltrimDoc": "Retire les espaces au début des chaînes.", "kbn-esql-validation-autocomplete.esql.definitions.maxDoc": "Renvoie la valeur maximale dans un champ.", "kbn-esql-validation-autocomplete.esql.definitions.medianDeviationDoc": "Renvoie la médiane de chaque écart de point de données par rapport à la médiane de l'ensemble de l'échantillon.", "kbn-esql-validation-autocomplete.esql.definitions.medianDoc": "Renvoie le 50centile.", "kbn-esql-validation-autocomplete.esql.definitions.metadataDoc": "Métadonnées", "kbn-esql-validation-autocomplete.esql.definitions.minDoc": "Renvoie la valeur minimale dans un champ.", - "kbn-esql-validation-autocomplete.esql.definitions.mvAvgDoc": "Convertit un champ multivalué en un champ à valeur unique comprenant la moyenne de toutes les valeurs.", - "kbn-esql-validation-autocomplete.esql.definitions.mvConcatDoc": "Convertit un champ de type chaîne multivalué en un champ à valeur unique comprenant la concaténation de toutes les valeurs, séparées par un délimiteur", - "kbn-esql-validation-autocomplete.esql.definitions.mvCountDoc": "Convertit un champ multivalué en un champ à valeur unique comprenant le total du nombre de valeurs", - "kbn-esql-validation-autocomplete.esql.definitions.mvDedupeDoc": "Supprime les doublons d'un champ multivalué", "kbn-esql-validation-autocomplete.esql.definitions.mvExpandDoc": "Développe des champs comportant des valeurs multiples en indiquant une valeur par ligne et en dupliquant les autres champs", - "kbn-esql-validation-autocomplete.esql.definitions.mvFirstDoc": "Réduit un champ multivalué en un champ à valeur unique comprenant la première valeur.", - "kbn-esql-validation-autocomplete.esql.definitions.mvLastDoc": "Réduit un champ multivalué en un champ à valeur unique comprenant la dernière valeur.", - "kbn-esql-validation-autocomplete.esql.definitions.mvMaxDoc": "Convertit un champ multivalué en un champ à valeur unique comprenant la valeur maximale.", - "kbn-esql-validation-autocomplete.esql.definitions.mvMedianDoc": "Convertit un champ multivalué en un champ à valeur unique comprenant la valeur médiane.", - "kbn-esql-validation-autocomplete.esql.definitions.mvMinDoc": "Convertit un champ multivalué en un champ à valeur unique comprenant la valeur minimale.", - "kbn-esql-validation-autocomplete.esql.definitions.mvSumDoc": "Convertit un champ multivalué en un champ à valeur unique comprenant la somme de toutes les valeurs.", - "kbn-esql-validation-autocomplete.esql.definitions.nowDoc": "Renvoie la date et l'heure actuelles.", "kbn-esql-validation-autocomplete.esql.definitions.onDoc": "Activé", "kbn-esql-validation-autocomplete.esql.definitions.percentiletDoc": "Renvoie le n-ième centile d'un champ.", - "kbn-esql-validation-autocomplete.esql.definitions.piDoc": "Le rapport entre la circonférence et le diamètre d'un cercle.", - "kbn-esql-validation-autocomplete.esql.definitions.powDoc": "Renvoie la valeur d'une base (premier argument) élevée à une puissance (deuxième argument).", "kbn-esql-validation-autocomplete.esql.definitions.renameDoc": "Attribue un nouveau nom à une ancienne colonne", - "kbn-esql-validation-autocomplete.esql.definitions.replaceDoc": "La fonction remplace dans la chaîne (1er argument) toutes les correspondances avec l'expression régulière (2e argument) par la chaîne de remplacement (3e argument). Si l'un des arguments est NULL, le résultat est NULL.", - "kbn-esql-validation-autocomplete.esql.definitions.rightDoc": "Renvoyer la sous-chaîne qui extrait la longueur des caractères de la chaîne en partant de la droite.", - "kbn-esql-validation-autocomplete.esql.definitions.roundDoc": "Renvoie un nombre arrondi à la décimale, spécifié par la valeur entière la plus proche. La valeur par défaut est arrondie à un entier.", "kbn-esql-validation-autocomplete.esql.definitions.rowDoc": "Renvoie une ligne contenant une ou plusieurs colonnes avec les valeurs que vous spécifiez. Cette commande peut s'avérer utile pour les tests.", - "kbn-esql-validation-autocomplete.esql.definitions.rtrimDoc": "Supprime les espaces à la fin des chaînes.", "kbn-esql-validation-autocomplete.esql.definitions.showDoc": "Renvoie des informations sur le déploiement et ses capacités", - "kbn-esql-validation-autocomplete.esql.definitions.sinDoc": "Fonction trigonométrique sinus.", - "kbn-esql-validation-autocomplete.esql.definitions.sinhDoc": "Fonction hyperbolique sinus.", "kbn-esql-validation-autocomplete.esql.definitions.sortDoc": "Trie tous les résultats en fonction des champs spécifiés. Par défaut, les valeurs null sont considérées comme supérieures à toutes les autres valeurs. Avec l'ordre de tri croissant, les valeurs null sont classées en dernier. Avec l'ordre de tri décroissant, elles sont classées en premier. Pour modifier cet ordre, utilisez NULLS FIRST ou NULLS LAST", - "kbn-esql-validation-autocomplete.esql.definitions.splitDoc": "Divise une chaîne de valeur unique en plusieurs chaînes.", - "kbn-esql-validation-autocomplete.esql.definitions.sqrtDoc": "Renvoie la racine carrée d'un nombre. ", - "kbn-esql-validation-autocomplete.esql.definitions.startsWithDoc": "Renvoie un booléen qui indique si une chaîne de mot-clés débute par une autre chaîne.", "kbn-esql-validation-autocomplete.esql.definitions.statsDoc": "Calcule les statistiques agrégées, telles que la moyenne, le décompte et la somme, sur l'ensemble des résultats de recherche entrants. Comme pour l'agrégation SQL, si la commande stats est utilisée sans clause BY, une seule ligne est renvoyée, qui est l'agrégation de tout l'ensemble des résultats de recherche entrants. Lorsque vous utilisez une clause BY, une ligne est renvoyée pour chaque valeur distincte dans le champ spécifié dans la clause BY. La commande stats renvoie uniquement les champs dans l'agrégation, et vous pouvez utiliser un large éventail de fonctions statistiques avec la commande stats. Lorsque vous effectuez plusieurs agrégations, séparez chacune d'entre elle par une virgule.", "kbn-esql-validation-autocomplete.esql.definitions.stCentroidDoc": "Renvoie le décompte des valeurs distinctes dans un champ.", - "kbn-esql-validation-autocomplete.esql.definitions.substringDoc": "Renvoie la sous-chaîne d'une chaîne, délimitée en fonction d'une position de départ et d'une longueur facultative.", "kbn-esql-validation-autocomplete.esql.definitions.sumDoc": "Renvoie la somme des valeurs dans un champ.", - "kbn-esql-validation-autocomplete.esql.definitions.tanDoc": "Fonction trigonométrique tangente.", - "kbn-esql-validation-autocomplete.esql.definitions.tanhDoc": "Fonction hyperbolique tangente.", - "kbn-esql-validation-autocomplete.esql.definitions.tauDoc": "Le rapport entre la circonférence et le rayon d'un cercle.", - "kbn-esql-validation-autocomplete.esql.definitions.toBooleanDoc": "Convertit en booléen.", - "kbn-esql-validation-autocomplete.esql.definitions.toCartesianPointDoc": "Convertit la valeur d'une entrée en une valeur \"point\".", - "kbn-esql-validation-autocomplete.esql.definitions.toCartesianshapeDoc": "Convertit la valeur d'une entrée en une valeur cartesian_shape.", - "kbn-esql-validation-autocomplete.esql.definitions.toDateTimeDoc": "Convertit en date.", - "kbn-esql-validation-autocomplete.esql.definitions.toDegreesDoc": "Convertit en degrés", - "kbn-esql-validation-autocomplete.esql.definitions.toDoubleDoc": "Convertit en double.", - "kbn-esql-validation-autocomplete.esql.definitions.toGeopointDoc": "Convertit en une valeur geo_point.", - "kbn-esql-validation-autocomplete.esql.definitions.toGeoshapeDoc": "Convertit la valeur d'une entrée en une valeur geo_shape.", - "kbn-esql-validation-autocomplete.esql.definitions.toIntegerDoc": "Convertit en nombre entier.", - "kbn-esql-validation-autocomplete.esql.definitions.toIpDoc": "Convertit en ip.", - "kbn-esql-validation-autocomplete.esql.definitions.toLongDoc": "Convertit en long.", - "kbn-esql-validation-autocomplete.esql.definitions.toLowerDoc": "Renvoie une nouvelle chaîne représentant la chaîne d'entrée convertie en minuscules.", - "kbn-esql-validation-autocomplete.esql.definitions.toRadiansDoc": "Convertit en radians", - "kbn-esql-validation-autocomplete.esql.definitions.toStringDoc": "Convertit en chaîne.", - "kbn-esql-validation-autocomplete.esql.definitions.toUnsignedLongDoc": "Convertit en long non signé.", - "kbn-esql-validation-autocomplete.esql.definitions.toUpperDoc": "Renvoie une nouvelle chaîne représentant la chaîne d'entrée convertie en majuscules.", - "kbn-esql-validation-autocomplete.esql.definitions.toVersionDoc": "Convertit en version.", - "kbn-esql-validation-autocomplete.esql.definitions.trimDoc": "Supprime les espaces de début et de fin d'une chaîne.", "kbn-esql-validation-autocomplete.esql.definitions.whereDoc": "Utilise \"predicate-expressions\" pour filtrer les résultats de recherche. Une expression predicate, lorsqu'elle est évaluée, renvoie TRUE ou FALSE. La commande where renvoie uniquement les résultats qui donnent la valeur TRUE. Par exemple, pour filtrer les résultats pour une valeur de champ spécifique", "kbn-esql-validation-autocomplete.esql.definitions.withDoc": "Avec", "kbn-esql-validation-autocomplete.esql.quickfix.replaceWithQuote": "Remplacer les guillemets par le signe \" (double)", @@ -25534,7 +25464,6 @@ "xpack.ml.actions.clearSelectionTitle": "Effacer la sélection", "xpack.ml.actions.createADJobFromLens": "Créer une tâche de détection des anomalies", "xpack.ml.actions.createADJobFromPatternAnalysis": "Créer une tâche de catégorisation et de détection des anomalies", - "xpack.ml.actions.editAnomalyChartsTitle": "Modifier les graphiques d'anomalies", "xpack.ml.actions.openInAnomalyExplorerTitle": "Ouvrir dans Anomaly Explorer", "xpack.ml.actions.runPatternAnalysis.description": "Déclenché lorsque l'utilisateur souhaite effectuer une analyse du modèle sur un champ.", "xpack.ml.actions.runPatternAnalysis.title": "Exécuter l'analyse du modèle", @@ -25743,7 +25672,6 @@ "xpack.ml.anomalyChartsEmbeddable.maxSeriesToPlotLabel": "Nombre maximal de séries à tracer", "xpack.ml.anomalyChartsEmbeddable.panelTitleLabel": "Titre du panneau", "xpack.ml.anomalyChartsEmbeddable.setupModal.cancelButtonLabel": "Annuler", - "xpack.ml.anomalyChartsEmbeddable.setupModal.confirmButtonLabel": "Confirmer les configurations", "xpack.ml.anomalyChartsEmbeddable.setupModal.title": "Configuration des graphiques Anomaly Explorer", "xpack.ml.anomalyDetection.anomalyExplorer.docTitle": "Anomaly Explorer (Explorateur d'anomalies)", "xpack.ml.anomalyDetection.anomalyExplorerLabel": "Anomaly Explorer (Explorateur d'anomalies)", @@ -40986,7 +40914,6 @@ "xpack.synthetics.monitorList.viewInDiscover": "Afficher dans Discover", "xpack.synthetics.monitorLocation.locationContextMenuTitleLabel": "Accéder à l'emplacement", "xpack.synthetics.monitorLocation.locationLabel": "Emplacement", - "xpack.synthetics.monitorManagement.accessRestricted": "Votre accès à l'infrastructure de test gérée à l'échelle mondiale est limité.", "xpack.synthetics.monitorManagement.actions": "Actions", "xpack.synthetics.monitorManagement.addAgentPolicyDesc": "Les emplacements privés nécessitent une politique d'agent. Pour ajouter un emplacement privé, vous devez d'abord créer une politique d'agent dans Fleet.", "xpack.synthetics.monitorManagement.addEdit.createMonitorLabel": "Créer le moniteur", @@ -41045,10 +40972,8 @@ "xpack.synthetics.monitorManagement.getProjectApiKey.label": "Générer une clé d'API de projet", "xpack.synthetics.monitorManagement.getProjectAPIKeyLabel.generate": "Générer une clé d'API de projet", "xpack.synthetics.monitorManagement.inProgress": "EN COURS", - "xpack.synthetics.monitorManagement.label": "Application Synthetics", "xpack.synthetics.monitorManagement.learnMore": "Pour en savoir plus,", "xpack.synthetics.monitorManagement.learnMore.label": "En savoir plus", - "xpack.synthetics.monitorManagement.loading.label": "Charger une application Synthetics", "xpack.synthetics.monitorManagement.loadingSteps": "Chargement des étapes...", "xpack.synthetics.monitorManagement.locationName": "Nom de l’emplacement", "xpack.synthetics.monitorManagement.locationsLabel": "Emplacements", @@ -41086,7 +41011,6 @@ "xpack.synthetics.monitorManagement.projectDelete.docsLink": "En savoir plus", "xpack.synthetics.monitorManagement.projectPush.label": "Commande push du projet", "xpack.synthetics.monitorManagement.readDocs": "lire les documents", - "xpack.synthetics.monitorManagement.requestAccess": "Demander un accès", "xpack.synthetics.monitorManagement.saveLabel": "Enregistrer", "xpack.synthetics.monitorManagement.selectOneOrMoreLocations": "Sélectionnez un ou plusieurs emplacements.", "xpack.synthetics.monitorManagement.selectOneOrMoreLocationsDetails": "Sélectionnez les emplacements où les moniteurs seront exécutés.", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 252712bbd8b0e..42ef3c2abf137 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -5054,27 +5054,15 @@ "kbn-esql-validation-autocomplete.esql.definition.orDoc": "または", "kbn-esql-validation-autocomplete.esql.definition.rlikeDoc": "文字列の正規表現に基づいてデータをフィルター", "kbn-esql-validation-autocomplete.esql.definition.subtractDoc": "減算(-)", - "kbn-esql-validation-autocomplete.esql.definitions.absDoc": "絶対値を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.acosDoc": "逆余弦三角関数", "kbn-esql-validation-autocomplete.esql.definitions.appendSeparatorDoc": "追加されたフィールドを区切る文字。デフォルトは空の文字列(\"\")です。", "kbn-esql-validation-autocomplete.esql.definitions.asDoc": "として", - "kbn-esql-validation-autocomplete.esql.definitions.asinDoc": "逆正弦三角関数", - "kbn-esql-validation-autocomplete.esql.definitions.atan2Doc": "直交平面上の原点から点(x , y)に向かう光線と正のx軸のなす角", - "kbn-esql-validation-autocomplete.esql.definitions.atanDoc": "逆正接三角関数", "kbn-esql-validation-autocomplete.esql.definitions.autoBucketDoc": "指定された範囲とバケット目標に基づいて、日付を自動的にバケット化します。", "kbn-esql-validation-autocomplete.esql.definitions.avgDoc": "フィールドの値の平均を返します", "kbn-esql-validation-autocomplete.esql.definitions.byDoc": "グループ基準", - "kbn-esql-validation-autocomplete.esql.definitions.caseDoc": "条件と値のペアを指定できます。この関数は、最初にtrueと評価された条件に属する値を返します。引数の数が奇数の場合、最後の引数は条件に一致しない場合に返されるデフォルト値になります。", "kbn-esql-validation-autocomplete.esql.definitions.ccqAnyDoc": "エンリッチは任意のクラスターで発生します", "kbn-esql-validation-autocomplete.esql.definitions.ccqCoordinatorDoc": "エンリッチは、ES|QLを受信する調整クラスターで実行されます", "kbn-esql-validation-autocomplete.esql.definitions.ccqModeDoc": "クラスター横断クエリモード", "kbn-esql-validation-autocomplete.esql.definitions.ccqRemoteDoc": "エンリッチはターゲットインデックスをホスティングするクラスターで発生します。", - "kbn-esql-validation-autocomplete.esql.definitions.ceilDoc": "最も近い整数に数値を切り上げます。", - "kbn-esql-validation-autocomplete.esql.definitions.cidrMatchDoc": "この関数は、IP型の最初のパラメーターを取り、その後にCIDR指定に対して評価された1つ以上のパラメーターを取ります。", - "kbn-esql-validation-autocomplete.esql.definitions.coalesceDoc": "最初のNULL以外の値を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.concatDoc": "2つ以上の文字列を連結します。", - "kbn-esql-validation-autocomplete.esql.definitions.cosDoc": "余弦三角関数", - "kbn-esql-validation-autocomplete.esql.definitions.coshDoc": "余弦双曲線関数", "kbn-esql-validation-autocomplete.esql.definitions.countDistinctDoc": "フィールド内の異なる値の数を返します。", "kbn-esql-validation-autocomplete.esql.definitions.countDoc": "フィールドの値の数を返します。", "kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.day": "日", @@ -5093,87 +5081,29 @@ "kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.weeks": "週(複数)", "kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.year": "年", "kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.years": "年(複数)", - "kbn-esql-validation-autocomplete.esql.definitions.dateExtractDoc": "年、月、日、時間など、日付の一部を抽出します。サポートされているフィールド型はjava.time.temporal.ChronoFieldで提供されている型です。", - "kbn-esql-validation-autocomplete.esql.definitions.dateFormatDoc": "指定した書式の日付の文字列表現を返します。書式が指定されていない場合は、yyyy-MM-dd'T'HH:mm:ss.SSSZの書式が使用されます。", - "kbn-esql-validation-autocomplete.esql.definitions.dateParseDoc": "文字列から日付を解析します。", - "kbn-esql-validation-autocomplete.esql.definitions.dateTruncDoc": "最も近い区間まで日付を切り捨てます。区間はtimespanリテラル構文を使って表現できます。", "kbn-esql-validation-autocomplete.esql.definitions.dissectDoc": "単一の文字列入力から、パターンに基づいて複数の文字列値を抽出", "kbn-esql-validation-autocomplete.esql.definitions.dropDoc": "列を削除", - "kbn-esql-validation-autocomplete.esql.definitions.eDoc": "Eulerの数値。", - "kbn-esql-validation-autocomplete.esql.definitions.endsWithDoc": "キーワード文字列が他の文字列で終わるかどうかを示すブール値を返します。", "kbn-esql-validation-autocomplete.esql.definitions.enrichDoc": "別のテーブルでテーブルをエンリッチします。エンリッチを使用する前に、エンリッチポリシーを作成して実行する必要があります。", "kbn-esql-validation-autocomplete.esql.definitions.evalDoc": "式を計算し、結果の値を検索結果フィールドに入力します。", - "kbn-esql-validation-autocomplete.esql.definitions.floorDoc": "最も近い整数に数値を切り捨てます。", "kbn-esql-validation-autocomplete.esql.definitions.fromDoc": "1つ以上のデータストリーム、インデックス、またはエイリアスからデータを取得します。クエリまたはサブクエリでは、最初にコマンドから使用する必要があります。先頭のパイプは不要です。たとえば、インデックスからデータを取得します。", - "kbn-esql-validation-autocomplete.esql.definitions.greatestDoc": "多数の列から最大値を返します。", "kbn-esql-validation-autocomplete.esql.definitions.grokDoc": "単一の文字列入力から、パターンに基づいて複数の文字列値を抽出", "kbn-esql-validation-autocomplete.esql.definitions.keepDoc": "フィールドでkeep句を適用して、入力テーブルのフィールドを並べ替えます", - "kbn-esql-validation-autocomplete.esql.definitions.leastDoc": "多数の列から最小値を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.leftDoc": "stringから左から順にlength文字を抜き出したサブ文字列を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.lengthDoc": "文字列の文字数を返します。", "kbn-esql-validation-autocomplete.esql.definitions.limitDoc": "指定された「制限」に基づき、検索順序で、最初の検索結果を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.log10Doc": "底が10の対数を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.logDoc": "スカラー関数対数(底、値)は、引数で指定されている特定の底の値の対数を返します", - "kbn-esql-validation-autocomplete.esql.definitions.ltrimDoc": "文字列から先頭の空白を取り除きます。", "kbn-esql-validation-autocomplete.esql.definitions.maxDoc": "フィールドの最大値を返します。", "kbn-esql-validation-autocomplete.esql.definitions.medianDeviationDoc": "サンプル全体の中央値からの各データポイントの偏差の中央値を返します。", "kbn-esql-validation-autocomplete.esql.definitions.medianDoc": "50%パーセンタイルを返します。", "kbn-esql-validation-autocomplete.esql.definitions.metadataDoc": "メタデータ", "kbn-esql-validation-autocomplete.esql.definitions.minDoc": "フィールドの最小値を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.mvAvgDoc": "複数値フィールドを、すべての値の平均を含む単一値フィールドに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.mvConcatDoc": "複数値文字列フィールドを、区切り文字で区切られたすべての値を連結した単一値フィールドに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.mvCountDoc": "複数値フィールドを、値の数をカウントする単一値フィールドに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.mvDedupeDoc": "複数値フィールドから重複を削除します。", "kbn-esql-validation-autocomplete.esql.definitions.mvExpandDoc": "複数値フィールドを値ごとに1行に展開し、他のフィールドを複製します", - "kbn-esql-validation-autocomplete.esql.definitions.mvFirstDoc": "複数値フィールドを、最初の値を含む単一値フィールドに縮小します。", - "kbn-esql-validation-autocomplete.esql.definitions.mvLastDoc": "複数値フィールドを、最後の値を含む単一値フィールドに縮小します。", - "kbn-esql-validation-autocomplete.esql.definitions.mvMaxDoc": "複数値フィールドを、最大値を含む単一値フィールドに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.mvMedianDoc": "複数値フィールドを、中央値を含む単一値フィールドに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.mvMinDoc": "複数値フィールドを、最小値を含む単一値フィールドに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.mvSumDoc": "複数値フィールドを、すべての値の合計を含む単一値フィールドに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.nowDoc": "現在の日付と時刻を返します。", "kbn-esql-validation-autocomplete.esql.definitions.onDoc": "オン", "kbn-esql-validation-autocomplete.esql.definitions.percentiletDoc": "フィールドのnパーセンタイルを返します。", - "kbn-esql-validation-autocomplete.esql.definitions.piDoc": "円の円周と直径の比率。", - "kbn-esql-validation-autocomplete.esql.definitions.powDoc": "底(第1引数)を累乗(第2引数)した値を返します。", "kbn-esql-validation-autocomplete.esql.definitions.renameDoc": "古い列の名前を新しい列に変更", - "kbn-esql-validation-autocomplete.esql.definitions.replaceDoc": "この関数は、文字列(第1引数)で、正規表現(第2引数)の任意の一致に置換文字列(第3引数)を代入します。いずれかの引数がNULLの場合、結果はNULLになります。", - "kbn-esql-validation-autocomplete.esql.definitions.rightDoc": "stringのうち右から数えてlength文字までのサブ文字列を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.roundDoc": "最も近い整数値で指定された数字まで端数処理された数値を返します。デフォルトは整数になるように四捨五入されます。", "kbn-esql-validation-autocomplete.esql.definitions.rowDoc": "指定した値の列を1つ以上含む行を作成します。これはテストの場合に便利です。", - "kbn-esql-validation-autocomplete.esql.definitions.rtrimDoc": "文字列から末尾の空白を取り除きます。", "kbn-esql-validation-autocomplete.esql.definitions.showDoc": "デプロイとその能力に関する情報を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.sinDoc": "正弦三角関数。", - "kbn-esql-validation-autocomplete.esql.definitions.sinhDoc": "正弦双曲線関数。", "kbn-esql-validation-autocomplete.esql.definitions.sortDoc": "すべての結果を指定されたフィールドで並べ替えます。デフォルトでは、null値は他のどの値よりも大きい値として扱われます。昇順のソートではnull値は最後にソートされ、降順のソートではnull値は最初にソートされます。NULLS FIRSTまたはNULLS LASTを指定することで変更できます。", - "kbn-esql-validation-autocomplete.esql.definitions.splitDoc": "単一の値の文字列を複数の文字列に分割します。", - "kbn-esql-validation-autocomplete.esql.definitions.sqrtDoc": "数値の平方根を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.startsWithDoc": "キーワード文字列が他の文字列で始まるかどうかを示すブール値を返します。", "kbn-esql-validation-autocomplete.esql.definitions.statsDoc": "受信検索結果セットで、平均、カウント、合計などの集約統計情報を計算します。SQL集約と同様に、statsコマンドをBY句なしで使用した場合は、1行のみが返されます。これは、受信検索結果セット全体に対する集約です。BY句を使用すると、BY句で指定したフィールドの1つの値ごとに1行が返されます。statsコマンドは集約のフィールドのみを返します。statsコマンドではさまざまな統計関数を使用できます。複数の集約を実行するときには、各集約をカンマで区切ります。", "kbn-esql-validation-autocomplete.esql.definitions.stCentroidDoc": "フィールド内の異なる値の数を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.substringDoc": "文字列のサブ文字列を、開始位置とオプションの長さで指定して返します。", "kbn-esql-validation-autocomplete.esql.definitions.sumDoc": "フィールドの値の合計を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.tanDoc": "正接三角関数。", - "kbn-esql-validation-autocomplete.esql.definitions.tanhDoc": "正接双曲線関数。", - "kbn-esql-validation-autocomplete.esql.definitions.tauDoc": "円の円周と半径の比率。", - "kbn-esql-validation-autocomplete.esql.definitions.toBooleanDoc": "ブール値に変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.toCartesianPointDoc": "入力値をpoint値に変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.toCartesianshapeDoc": "入力値をcartesian_shape値に変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.toDateTimeDoc": "日付に変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.toDegreesDoc": "度に変換します", - "kbn-esql-validation-autocomplete.esql.definitions.toDoubleDoc": "doubleに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.toGeopointDoc": "geo_pointに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.toGeoshapeDoc": "入力値をgeo_shape値に変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.toIntegerDoc": "整数に変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.toIpDoc": "IPに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.toLongDoc": "longに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.toLowerDoc": "小文字に変換された入力文字列を表す新しい文字列を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.toRadiansDoc": "ラジアンに変換します", - "kbn-esql-validation-autocomplete.esql.definitions.toStringDoc": "文字列に変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.toUnsignedLongDoc": "符号なしlongに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.toUpperDoc": "大文字に変換された入力文字列を表す新しい文字列を返します。", - "kbn-esql-validation-autocomplete.esql.definitions.toVersionDoc": "バージョンに変換します。", - "kbn-esql-validation-autocomplete.esql.definitions.trimDoc": "文字列から先頭と末尾の空白を削除します。", "kbn-esql-validation-autocomplete.esql.definitions.whereDoc": "「predicate-expressions」を使用して、検索結果をフィルターします。予測式は評価時にTRUEまたはFALSEを返します。whereコマンドはTRUEに評価される結果のみを返します。たとえば、特定のフィールド値の結果をフィルターします", "kbn-esql-validation-autocomplete.esql.definitions.withDoc": "を使用して", "kbn-esql-validation-autocomplete.esql.quickfix.replaceWithQuote": "引用符を\"(二重引用符)に変更", @@ -25507,7 +25437,6 @@ "xpack.ml.actions.clearSelectionTitle": "選択した項目をクリア", "xpack.ml.actions.createADJobFromLens": "異常検知ジョブの作成", "xpack.ml.actions.createADJobFromPatternAnalysis": "分類異常検知ジョブを作成", - "xpack.ml.actions.editAnomalyChartsTitle": "異常グラフを編集", "xpack.ml.actions.openInAnomalyExplorerTitle": "異常エクスプローラーで開く", "xpack.ml.actions.runPatternAnalysis.description": "ユーザーがフィールドに対してパターン分析を実行する場合にトリガーされます。", "xpack.ml.actions.runPatternAnalysis.title": "パターン分析を実行", @@ -25716,7 +25645,6 @@ "xpack.ml.anomalyChartsEmbeddable.maxSeriesToPlotLabel": "プロットする最大系列数", "xpack.ml.anomalyChartsEmbeddable.panelTitleLabel": "パネルタイトル", "xpack.ml.anomalyChartsEmbeddable.setupModal.cancelButtonLabel": "キャンセル", - "xpack.ml.anomalyChartsEmbeddable.setupModal.confirmButtonLabel": "構成を確認", "xpack.ml.anomalyChartsEmbeddable.setupModal.title": "異常エクスプローラーグラフ構成", "xpack.ml.anomalyDetection.anomalyExplorer.docTitle": "異常エクスプローラー", "xpack.ml.anomalyDetection.anomalyExplorerLabel": "異常エクスプローラー", @@ -40957,7 +40885,6 @@ "xpack.synthetics.monitorList.viewInDiscover": "Discoverに表示", "xpack.synthetics.monitorLocation.locationContextMenuTitleLabel": "場所に移動", "xpack.synthetics.monitorLocation.locationLabel": "場所", - "xpack.synthetics.monitorManagement.accessRestricted": "グローバルマネージドテストインフラストラクチャーへのアクセスは制限されています。", "xpack.synthetics.monitorManagement.actions": "アクション", "xpack.synthetics.monitorManagement.addAgentPolicyDesc": "非公開の場所にはエージェントポリシーが必要です。非公開の場所を追加するには、まず、Fleetでエージェントポリシーを作成する必要があります。", "xpack.synthetics.monitorManagement.addEdit.createMonitorLabel": "監視の作成", @@ -41016,10 +40943,8 @@ "xpack.synthetics.monitorManagement.getProjectApiKey.label": "プロジェクトAPIキーを生成", "xpack.synthetics.monitorManagement.getProjectAPIKeyLabel.generate": "プロジェクトAPIキーを生成", "xpack.synthetics.monitorManagement.inProgress": "進行中", - "xpack.synthetics.monitorManagement.label": "Syntheticsアプリ", "xpack.synthetics.monitorManagement.learnMore": "詳細については、", "xpack.synthetics.monitorManagement.learnMore.label": "詳細", - "xpack.synthetics.monitorManagement.loading.label": "Syntheticsアプリを読み込み中", "xpack.synthetics.monitorManagement.loadingSteps": "ステップを読み込んでいます...", "xpack.synthetics.monitorManagement.locationName": "場所名", "xpack.synthetics.monitorManagement.locationsLabel": "場所", @@ -41057,7 +40982,6 @@ "xpack.synthetics.monitorManagement.projectDelete.docsLink": "詳細", "xpack.synthetics.monitorManagement.projectPush.label": "プロジェクトプッシュコマンド", "xpack.synthetics.monitorManagement.readDocs": "ドキュメントを読む", - "xpack.synthetics.monitorManagement.requestAccess": "アクセスをリクエストする", "xpack.synthetics.monitorManagement.saveLabel": "保存", "xpack.synthetics.monitorManagement.selectOneOrMoreLocations": "1つ以上の場所を選択してください。", "xpack.synthetics.monitorManagement.selectOneOrMoreLocationsDetails": "モニターが実行される場所を選択します。", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 117cbce80da6c..d35e005f3bb61 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -5065,27 +5065,15 @@ "kbn-esql-validation-autocomplete.esql.definition.orDoc": "或", "kbn-esql-validation-autocomplete.esql.definition.rlikeDoc": "根据字符串正则表达式筛选数据", "kbn-esql-validation-autocomplete.esql.definition.subtractDoc": "减 (-)", - "kbn-esql-validation-autocomplete.esql.definitions.absDoc": "返回绝对值。", - "kbn-esql-validation-autocomplete.esql.definitions.acosDoc": "反余弦三角函数", "kbn-esql-validation-autocomplete.esql.definitions.appendSeparatorDoc": "分隔已追加字段的字符。默认为空字符串 (\"\")。", "kbn-esql-validation-autocomplete.esql.definitions.asDoc": "作为", - "kbn-esql-validation-autocomplete.esql.definitions.asinDoc": "反正弦三角函数", - "kbn-esql-validation-autocomplete.esql.definitions.atan2Doc": "笛卡儿平面中正 x 轴与从原点到点 (x , y) 构成的射线之间的角度", - "kbn-esql-validation-autocomplete.esql.definitions.atanDoc": "反正切三角函数", "kbn-esql-validation-autocomplete.esql.definitions.autoBucketDoc": "根据给定范围和存储桶目标自动收集存储桶日期。", "kbn-esql-validation-autocomplete.esql.definitions.avgDoc": "返回字段中的值的平均值", "kbn-esql-validation-autocomplete.esql.definitions.byDoc": "依据", - "kbn-esql-validation-autocomplete.esql.definitions.caseDoc": "接受成对的条件和值。此函数返回属于第一个评估为 `true` 的条件的值。如果参数数量为奇数,则最后一个参数为在无条件匹配时返回的默认值。", "kbn-esql-validation-autocomplete.esql.definitions.ccqAnyDoc": "扩充在任何集群上发生", "kbn-esql-validation-autocomplete.esql.definitions.ccqCoordinatorDoc": "扩充在接收 ES|QL 的协调集群上发生", "kbn-esql-validation-autocomplete.esql.definitions.ccqModeDoc": "跨集群查询模式", "kbn-esql-validation-autocomplete.esql.definitions.ccqRemoteDoc": "扩充在托管目标索引的集群上发生。", - "kbn-esql-validation-autocomplete.esql.definitions.ceilDoc": "将数字四舍五入为最近的整数。", - "kbn-esql-validation-autocomplete.esql.definitions.cidrMatchDoc": "此函数接受的第一个参数应为 IP 类型,后接一个或多个评估为 CIDR 规范的参数。", - "kbn-esql-validation-autocomplete.esql.definitions.coalesceDoc": "返回第一个非 null 值。", - "kbn-esql-validation-autocomplete.esql.definitions.concatDoc": "串联两个或多个字符串。", - "kbn-esql-validation-autocomplete.esql.definitions.cosDoc": "余弦三角函数", - "kbn-esql-validation-autocomplete.esql.definitions.coshDoc": "余弦双曲函数", "kbn-esql-validation-autocomplete.esql.definitions.countDistinctDoc": "返回字段中不同值的计数。", "kbn-esql-validation-autocomplete.esql.definitions.countDoc": "返回字段中的值的计数。", "kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.day": "天", @@ -5104,87 +5092,29 @@ "kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.weeks": "周(复数)", "kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.year": "年", "kbn-esql-validation-autocomplete.esql.definitions.dateDurationDefinition.years": "年(复数)", - "kbn-esql-validation-autocomplete.esql.definitions.dateExtractDoc": "提取日期的某些部分,如年、月、日、小时。支持的字段类型为 java.time.temporal.ChronoField 提供的那些类型", - "kbn-esql-validation-autocomplete.esql.definitions.dateFormatDoc": "以提供的格式返回日期的字符串表示形式。如果未指定格式,则使用“yyyy-MM-dd'T'HH:mm:ss.SSSZ”格式。", - "kbn-esql-validation-autocomplete.esql.definitions.dateParseDoc": "解析字符串中的日期。", - "kbn-esql-validation-autocomplete.esql.definitions.dateTruncDoc": "将日期向下舍入到最近的时间间隔。时间间隔可以用时间跨度文本语法表示。", "kbn-esql-validation-autocomplete.esql.definitions.dissectDoc": "根据模式从单个字符串输入中提取多个字符串值", "kbn-esql-validation-autocomplete.esql.definitions.dropDoc": "丢弃列", - "kbn-esql-validation-autocomplete.esql.definitions.eDoc": "Euler 函数的编号。", - "kbn-esql-validation-autocomplete.esql.definitions.endsWithDoc": "返回布尔值,指示关键字字符串是否以另一个字符串结尾:", "kbn-esql-validation-autocomplete.esql.definitions.enrichDoc": "用其他表来扩充表。在使用扩充之前,您需要创建并执行扩充策略。", "kbn-esql-validation-autocomplete.esql.definitions.evalDoc": "计算表达式并将生成的值置入搜索结果字段。", - "kbn-esql-validation-autocomplete.esql.definitions.floorDoc": "将数字向下舍入到最近的整数。", "kbn-esql-validation-autocomplete.esql.definitions.fromDoc": "从一个或多个数据流、索引或别名中检索数据。在查询或子查询中,必须先使用 from 命令,并且它不需要前导管道符。例如,要从索引中检索数据:", - "kbn-esql-validation-autocomplete.esql.definitions.greatestDoc": "返回许多列中的最大值。", "kbn-esql-validation-autocomplete.esql.definitions.grokDoc": "根据模式从单个字符串输入中提取多个字符串值", "kbn-esql-validation-autocomplete.esql.definitions.keepDoc": "通过在字段中应用 keep 子句重新安排输入表中的字段", - "kbn-esql-validation-autocomplete.esql.definitions.leastDoc": "返回许多列中的最小值。", - "kbn-esql-validation-autocomplete.esql.definitions.leftDoc": "返回从字符串中提取长度字符的子字符串,从左侧开始。", - "kbn-esql-validation-autocomplete.esql.definitions.lengthDoc": "返回字符串的字符长度。", "kbn-esql-validation-autocomplete.esql.definitions.limitDoc": "根据指定的“限制”按搜索顺序返回第一个搜索结果。", - "kbn-esql-validation-autocomplete.esql.definitions.log10Doc": "返回对数底数 10。", - "kbn-esql-validation-autocomplete.esql.definitions.logDoc": "如参数中所指定,标量函数 log(based, value) 返回特定底数的值的对数", - "kbn-esql-validation-autocomplete.esql.definitions.ltrimDoc": "从字符串中移除前导空格。", "kbn-esql-validation-autocomplete.esql.definitions.maxDoc": "返回字段中的最大值。", "kbn-esql-validation-autocomplete.esql.definitions.medianDeviationDoc": "返回每个数据点的中位数与整个样例的中位数的偏差。", "kbn-esql-validation-autocomplete.esql.definitions.medianDoc": "返回 50% 百分位数。", "kbn-esql-validation-autocomplete.esql.definitions.metadataDoc": "元数据", "kbn-esql-validation-autocomplete.esql.definitions.minDoc": "返回字段中的最小值。", - "kbn-esql-validation-autocomplete.esql.definitions.mvAvgDoc": "将多值字段转换为包含所有值的平均值的单值字段。", - "kbn-esql-validation-autocomplete.esql.definitions.mvConcatDoc": "将多值字符串字段转换为单值字段,其中包含由分隔符分隔的所有值的串联形式", - "kbn-esql-validation-autocomplete.esql.definitions.mvCountDoc": "将多值字段转换为包含值计数的单值字段", - "kbn-esql-validation-autocomplete.esql.definitions.mvDedupeDoc": "移除多值字段中的重复项", "kbn-esql-validation-autocomplete.esql.definitions.mvExpandDoc": "将多值字段扩展成每个值一行,从而复制其他字段", - "kbn-esql-validation-autocomplete.esql.definitions.mvFirstDoc": "将多值字段缩减为包含第一个值的单值字段。", - "kbn-esql-validation-autocomplete.esql.definitions.mvLastDoc": "将多值字段缩减为包含最后一个值的单值字段。", - "kbn-esql-validation-autocomplete.esql.definitions.mvMaxDoc": "将多值字段转换为包含最大值的单值字段。", - "kbn-esql-validation-autocomplete.esql.definitions.mvMedianDoc": "将多值字段转换为包含中位数值的单值字段。", - "kbn-esql-validation-autocomplete.esql.definitions.mvMinDoc": "将多值字段转换为包含最小值的单值字段。", - "kbn-esql-validation-autocomplete.esql.definitions.mvSumDoc": "将多值字段转换为包含所有值的总和的单值字段。", - "kbn-esql-validation-autocomplete.esql.definitions.nowDoc": "返回当前日期和时间。", "kbn-esql-validation-autocomplete.esql.definitions.onDoc": "开启", "kbn-esql-validation-autocomplete.esql.definitions.percentiletDoc": "返回字段的第 n 个百分位。", - "kbn-esql-validation-autocomplete.esql.definitions.piDoc": "圆的周长与其直径的比率。", - "kbn-esql-validation-autocomplete.esql.definitions.powDoc": "返回提升为幂(第二个参数)的底数(第一个参数)的值。", "kbn-esql-validation-autocomplete.esql.definitions.renameDoc": "将旧列重命名为新列", - "kbn-esql-validation-autocomplete.esql.definitions.replaceDoc": "此函数将字符串(第 1 个参数)中正则表达式(第 2 个参数)的任何匹配项替换为替代字符串(第 3 个参数)。如果任何参数为 NULL,则结果为 NULL。", - "kbn-esql-validation-autocomplete.esql.definitions.rightDoc": "返回从字符串中提取长度字符的子字符串,从右侧开始。", - "kbn-esql-validation-autocomplete.esql.definitions.roundDoc": "返回四舍五入到小数(由最近的整数值指定)的数字。默认做法是四舍五入到整数。", "kbn-esql-validation-autocomplete.esql.definitions.rowDoc": "生成一个行,其中包含一个或多个含有您指定的值的列。这可以用于测试。", - "kbn-esql-validation-autocomplete.esql.definitions.rtrimDoc": "从字符串中移除尾随空格。", "kbn-esql-validation-autocomplete.esql.definitions.showDoc": "返回有关部署及其功能的信息", - "kbn-esql-validation-autocomplete.esql.definitions.sinDoc": "正弦三角函数。", - "kbn-esql-validation-autocomplete.esql.definitions.sinhDoc": "正弦双曲函数。", "kbn-esql-validation-autocomplete.esql.definitions.sortDoc": "按指定字段对所有结果排序。默认情况下,会将 null 值视为大于任何其他值。使用升序排序顺序时,会最后对 null 值排序,而使用降序排序顺序时,会首先对 null 值排序。您可以通过提供 NULLS FIRST 或 NULLS LAST 来更改该排序", - "kbn-esql-validation-autocomplete.esql.definitions.splitDoc": "将单值字符串拆分成多个字符串。", - "kbn-esql-validation-autocomplete.esql.definitions.sqrtDoc": "返回数字的平方根。", - "kbn-esql-validation-autocomplete.esql.definitions.startsWithDoc": "返回指示关键字字符串是否以另一个字符串开头的布尔值。", "kbn-esql-validation-autocomplete.esql.definitions.statsDoc": "对传入的搜索结果集计算汇总统计信息,如平均值、计数和总和。与 SQL 聚合类似,如果使用不含 BY 子句的 stats 命令,则只返回一行内容,即聚合传入的整个搜索结果集。使用 BY 子句时,将为在 BY 子句中指定的字段中的每个不同值返回一行内容。stats 命令仅返回聚合中的字段,并且您可以将一系列统计函数与 stats 命令搭配在一起使用。执行多个聚合时,请用逗号分隔每个聚合。", "kbn-esql-validation-autocomplete.esql.definitions.stCentroidDoc": "返回字段中不同值的计数。", - "kbn-esql-validation-autocomplete.esql.definitions.substringDoc": "返回字符串的子字符串,用起始位置和可选长度指定。", "kbn-esql-validation-autocomplete.esql.definitions.sumDoc": "返回字段中的值的总和。", - "kbn-esql-validation-autocomplete.esql.definitions.tanDoc": "正切三角函数。", - "kbn-esql-validation-autocomplete.esql.definitions.tanhDoc": "正切双曲函数。", - "kbn-esql-validation-autocomplete.esql.definitions.tauDoc": "圆的圆周长与其半径的比率。", - "kbn-esql-validation-autocomplete.esql.definitions.toBooleanDoc": "转换为布尔值。", - "kbn-esql-validation-autocomplete.esql.definitions.toCartesianPointDoc": "将输入值转换为 `point` 值。", - "kbn-esql-validation-autocomplete.esql.definitions.toCartesianshapeDoc": "将输入值转换为 cartesian_shape 值。", - "kbn-esql-validation-autocomplete.esql.definitions.toDateTimeDoc": "转换为日期。", - "kbn-esql-validation-autocomplete.esql.definitions.toDegreesDoc": "转换为度", - "kbn-esql-validation-autocomplete.esql.definitions.toDoubleDoc": "转换为双精度值。", - "kbn-esql-validation-autocomplete.esql.definitions.toGeopointDoc": "转换为 geo_point。", - "kbn-esql-validation-autocomplete.esql.definitions.toGeoshapeDoc": "将输入值转换为 geo_shape 值。", - "kbn-esql-validation-autocomplete.esql.definitions.toIntegerDoc": "转换为整数。", - "kbn-esql-validation-autocomplete.esql.definitions.toIpDoc": "转换为 IP。", - "kbn-esql-validation-autocomplete.esql.definitions.toLongDoc": "转换为长整型。", - "kbn-esql-validation-autocomplete.esql.definitions.toLowerDoc": "返回一个新字符串,表示已将输入字符串转为小写。", - "kbn-esql-validation-autocomplete.esql.definitions.toRadiansDoc": "转换为弧度", - "kbn-esql-validation-autocomplete.esql.definitions.toStringDoc": "转换为字符串。", - "kbn-esql-validation-autocomplete.esql.definitions.toUnsignedLongDoc": "转换为无符号长整型。", - "kbn-esql-validation-autocomplete.esql.definitions.toUpperDoc": "返回一个新字符串,表示已将输入字符串转为大写。", - "kbn-esql-validation-autocomplete.esql.definitions.toVersionDoc": "转换为版本。", - "kbn-esql-validation-autocomplete.esql.definitions.trimDoc": "从字符串中移除前导和尾随空格。", "kbn-esql-validation-autocomplete.esql.definitions.whereDoc": "使用“predicate-expressions”可筛选搜索结果。进行计算时,谓词表达式将返回 TRUE 或 FALSE。where 命令仅返回计算结果为 TRUE 的结果。例如,筛选特定字段值的结果", "kbn-esql-validation-autocomplete.esql.definitions.withDoc": "具有", "kbn-esql-validation-autocomplete.esql.quickfix.replaceWithQuote": "将引号更改为 \"(双引号)", @@ -25546,7 +25476,6 @@ "xpack.ml.actions.clearSelectionTitle": "清除所选内容", "xpack.ml.actions.createADJobFromLens": "创建异常检测作业", "xpack.ml.actions.createADJobFromPatternAnalysis": "创建归类异常检测作业", - "xpack.ml.actions.editAnomalyChartsTitle": "编辑异常图表", "xpack.ml.actions.openInAnomalyExplorerTitle": "在 Anomaly Explorer 中打开", "xpack.ml.actions.runPatternAnalysis.description": "在用户希望对字段运行模式分析时触发。", "xpack.ml.actions.runPatternAnalysis.title": "运行模式分析", @@ -25755,7 +25684,6 @@ "xpack.ml.anomalyChartsEmbeddable.maxSeriesToPlotLabel": "要绘制的最大序列数目", "xpack.ml.anomalyChartsEmbeddable.panelTitleLabel": "面板标题", "xpack.ml.anomalyChartsEmbeddable.setupModal.cancelButtonLabel": "取消", - "xpack.ml.anomalyChartsEmbeddable.setupModal.confirmButtonLabel": "确认配置", "xpack.ml.anomalyChartsEmbeddable.setupModal.title": "异常浏览器图表配置", "xpack.ml.anomalyDetection.anomalyExplorer.docTitle": "Anomaly Explorer", "xpack.ml.anomalyDetection.anomalyExplorerLabel": "Anomaly Explorer", @@ -41004,7 +40932,6 @@ "xpack.synthetics.monitorList.viewInDiscover": "在 Discover 中查看", "xpack.synthetics.monitorLocation.locationContextMenuTitleLabel": "前往位置", "xpack.synthetics.monitorLocation.locationLabel": "位置", - "xpack.synthetics.monitorManagement.accessRestricted": "您对全球托管测试基础设施的访问权限受到限制。", "xpack.synthetics.monitorManagement.actions": "操作", "xpack.synthetics.monitorManagement.addAgentPolicyDesc": "专用位置需要代理策略。要添加专用位置,必须首先在 Fleet 中创建代理策略。", "xpack.synthetics.monitorManagement.addEdit.createMonitorLabel": "创建监测", @@ -41063,10 +40990,8 @@ "xpack.synthetics.monitorManagement.getProjectApiKey.label": "生成项目 API 密钥", "xpack.synthetics.monitorManagement.getProjectAPIKeyLabel.generate": "生成项目 API 密钥", "xpack.synthetics.monitorManagement.inProgress": "进行中", - "xpack.synthetics.monitorManagement.label": "Synthetics 应用", "xpack.synthetics.monitorManagement.learnMore": "有关更多信息,", "xpack.synthetics.monitorManagement.learnMore.label": "了解详情", - "xpack.synthetics.monitorManagement.loading.label": "正在加载 Synthetics 应用", "xpack.synthetics.monitorManagement.loadingSteps": "正在加载步骤......", "xpack.synthetics.monitorManagement.locationName": "位置名称", "xpack.synthetics.monitorManagement.locationsLabel": "位置", @@ -41104,7 +41029,6 @@ "xpack.synthetics.monitorManagement.projectDelete.docsLink": "了解详情", "xpack.synthetics.monitorManagement.projectPush.label": "项目推送命令", "xpack.synthetics.monitorManagement.readDocs": "阅读文档", - "xpack.synthetics.monitorManagement.requestAccess": "请求访问权限", "xpack.synthetics.monitorManagement.saveLabel": "保存", "xpack.synthetics.monitorManagement.selectOneOrMoreLocations": "选择一个或多个位置。", "xpack.synthetics.monitorManagement.selectOneOrMoreLocationsDetails": "选择将执行监测的位置。", diff --git a/x-pack/test/accessibility/apps/group3/ml_embeddables_in_dashboard.ts b/x-pack/test/accessibility/apps/group3/ml_embeddables_in_dashboard.ts index 39a10547c57b9..69a95822be3af 100644 --- a/x-pack/test/accessibility/apps/group3/ml_embeddables_in_dashboard.ts +++ b/x-pack/test/accessibility/apps/group3/ml_embeddables_in_dashboard.ts @@ -103,12 +103,15 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); it('can select jobs', async () => { - await ml.dashboardJobSelectionTable.setRowCheckboxState(testData.jobConfig.job_id, true); - await ml.dashboardJobSelectionTable.applyJobSelection(); + await ml.alerting.selectJobs([testData.jobConfig.job_id]); + await ml.alerting.assertJobSelection([testData.jobConfig.job_id]); + }); + + it('populates with default default info', async () => { await ml.dashboardEmbeddables.assertAnomalyChartsEmbeddableInitializerExists(); + await ml.dashboardEmbeddables.assertSelectMaxSeriesToPlotValue(6); await a11y.testAppSnapshot(); }); - it('create new anomaly charts panel', async () => { await ml.dashboardEmbeddables.clickInitializerConfirmButtonEnabled(); await ml.dashboardEmbeddables.assertDashboardPanelExists(testData.panelTitle); diff --git a/x-pack/test/api_integration/apis/synthetics/synthetics_enablement.ts b/x-pack/test/api_integration/apis/synthetics/synthetics_enablement.ts index cbefc039ca296..5f6d693dfb551 100644 --- a/x-pack/test/api_integration/apis/synthetics/synthetics_enablement.ts +++ b/x-pack/test/api_integration/apis/synthetics/synthetics_enablement.ts @@ -96,6 +96,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: false, isEnabled: false, isValidApiKey: false, + isServiceAllowed: true, }); } finally { await security.user.delete(username); @@ -142,6 +143,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: true, isEnabled: true, isValidApiKey: true, + isServiceAllowed: true, }); const validApiKeys = await getApiKeys(); expect(validApiKeys.length).eql(1); @@ -190,6 +192,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: true, isEnabled: true, isValidApiKey: true, + isServiceAllowed: true, }); const validApiKeys = await getApiKeys(); @@ -209,6 +212,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: true, isEnabled: true, isValidApiKey: true, + isServiceAllowed: true, }); const validApiKeys2 = await getApiKeys(); @@ -292,6 +296,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: true, isEnabled: true, isValidApiKey: true, + isServiceAllowed: true, }); const validApiKeys2 = await getApiKeys(); @@ -341,6 +346,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: true, isEnabled: true, isValidApiKey: true, + isServiceAllowed: true, }); const validApiKeys = await getApiKeys(); @@ -371,6 +377,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: true, isEnabled: true, isValidApiKey: true, + isServiceAllowed: true, }); const validApiKeys2 = await getApiKeys(); @@ -417,6 +424,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: false, isEnabled: false, isValidApiKey: false, + isServiceAllowed: true, }); } finally { await security.role.delete(roleName); @@ -483,6 +491,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: true, isEnabled: true, isValidApiKey: true, + isServiceAllowed: true, }); } finally { await security.user.delete(username); @@ -533,6 +542,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: false, isEnabled: true, isValidApiKey: true, + isServiceAllowed: true, }); } finally { await supertestWithAuth @@ -586,6 +596,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: true, isEnabled: true, isValidApiKey: true, + isServiceAllowed: true, }); await supertest @@ -610,6 +621,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: true, isEnabled: true, isValidApiKey: true, + isServiceAllowed: true, }); // can disable synthetics in non default space when enabled in default space @@ -635,6 +647,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: true, isEnabled: true, isValidApiKey: true, + isServiceAllowed: true, }); } finally { await security.user.delete(username); diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/anomaly_charts_dashboard_embeddables.ts b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/anomaly_charts_dashboard_embeddables.ts index 19b48858b115b..7f13c22c9eb91 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_integrations/anomaly_charts_dashboard_embeddables.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_integrations/anomaly_charts_dashboard_embeddables.ts @@ -73,10 +73,12 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ML_EMBEDDABLE_TYPES.ANOMALY_CHARTS ); }); - it('can select jobs', async () => { - await ml.dashboardJobSelectionTable.setRowCheckboxState(testData.jobConfig.job_id, true); - await ml.dashboardJobSelectionTable.applyJobSelection(); + await ml.alerting.selectJobs([testData.jobConfig.job_id]); + await ml.alerting.assertJobSelection([testData.jobConfig.job_id]); + }); + + it('populates with default default info', async () => { await ml.dashboardEmbeddables.assertAnomalyChartsEmbeddableInitializerExists(); await ml.dashboardEmbeddables.assertSelectMaxSeriesToPlotValue(6); }); diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/index.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/index.ts index 254bd76f5616b..a2b199092cdc8 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/index.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/index.ts @@ -40,6 +40,7 @@ export default function ({ getService, loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./single_metric_job')); if (!isCcs) { + loadTestFile(require.resolve('./job_expanded_details')); loadTestFile(require.resolve('./single_metric_job_without_datafeed_start')); loadTestFile(require.resolve('./multi_metric_job')); loadTestFile(require.resolve('./population_job')); diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/job_expanded_details.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/job_expanded_details.ts new file mode 100644 index 0000000000000..c1c8eee13ba22 --- /dev/null +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/job_expanded_details.ts @@ -0,0 +1,117 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { Job } from '@kbn/ml-plugin/common/types/anomaly_detection_jobs'; +import { JOB_STATE } from '@kbn/ml-plugin/common'; +import { FtrProviderContext } from '../../../ftr_provider_context'; +import { QuickFilterButtonTypes } from '../../../services/ml/job_table'; + +export default function ({ getService }: FtrProviderContext) { + const esArchiver = getService('esArchiver'); + const ml = getService('ml'); + + const jobId = `fq_single_1_job_list_test_${Date.now()}`; + const calendarId = `test-calendar-${Date.now()}`; + const jobsSummaryId = `jobs_summary_fq_multi_${Date.now()}`; + + const multiMetricJobConfig: Job = { + allow_lazy_open: false, + model_snapshot_retention_days: 0, + results_index_name: '', + job_id: jobsSummaryId, + description: 'mean(responsetime) partition=airline on farequote dataset with 1h bucket span', + groups: ['farequote', 'automated', 'multi-metric'], + analysis_config: { + bucket_span: '1h', + influencers: ['airline'], + detectors: [ + { function: 'mean', field_name: 'responsetime', partition_field_name: 'airline' }, + ], + }, + data_description: { time_field: '@timestamp' }, + analysis_limits: { model_memory_limit: '50mb' }, + model_plot_config: { enabled: true }, + }; + + describe('job expanded details', function () { + this.tags(['ml']); + + before(async () => { + await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/farequote'); + await ml.testResources.createDataViewIfNeeded('ft_farequote', '@timestamp'); + await ml.testResources.setKibanaTimeZoneToUTC(); + + const JOB_CONFIG = ml.commonConfig.getADFqSingleMetricJobConfig(jobId); + const DATAFEED_CONFIG = ml.commonConfig.getADFqDatafeedConfig(jobId); + + await ml.api.createAndRunAnomalyDetectionLookbackJob(JOB_CONFIG, DATAFEED_CONFIG); + + await ml.api.waitForJobState(jobId, JOB_STATE.CLOSED); + await ml.api.openAnomalyDetectionJob(jobId); + + await ml.api.addForecast(jobId, { duration: '1d' }); + + await ml.api.assertForecastResultsExist(jobId); + + await ml.api.createAnomalyDetectionJob(multiMetricJobConfig); + + await ml.api.createCalendar(calendarId, { + description: 'calendar for job list test', + job_ids: [jobId], + }); + + await ml.navigation.navigateToMl(); + + await ml.navigation.navigateToJobManagement(); + }); + + after(async () => { + await ml.api.closeAnomalyDetectionJob(jobId); + await ml.api.deleteAnomalyDetectionJobES(jobId); + + await ml.api.deleteAnomalyDetectionJobES(jobsSummaryId); + + await ml.api.cleanMlIndices(); + await ml.testResources.deleteDataViewByTitle('ft_farequote'); + }); + + it('expanded row with connected calendar shows link to calendar', async () => { + await ml.jobExpandedDetails.assertJobRowCalendars(jobId, [calendarId]); + }); + + it('expanded row with forecast should display open forecast button', async () => { + await ml.jobExpandedDetails.assertForecastElements(jobId); + }); + + it('expanded row with annotations can be edited', async () => { + const annotationsFromApi = await ml.api.getAnnotations(jobId); + + await ml.jobExpandedDetails.editAnnotation(jobId, 'edited annotation', annotationsFromApi); + }); + + it('expanded row with data feed flyout should display correctly', async () => { + await ml.jobExpandedDetails.assertDataFeedFlyout(jobId); + }); + + it('expanded row with model snapshot should display correctly', async () => { + await ml.jobExpandedDetails.assertModelSnapshotManagement(jobId); + }); + + it('multi-selection with one opened job should only present the opened job when job list is filtered by the Opened button', async () => { + await ml.jobTable.selectAllJobs(); + await ml.jobExpandedDetails.assertJobListMultiSelectionText('2 jobs selected'); + await ml.jobTable.filterByState(QuickFilterButtonTypes.Opened); + await ml.jobTable.assertJobsInTable([jobId]); + await ml.jobExpandedDetails.assertJobListMultiSelectionText('1 job selected'); + }); + + it('multi-selection with one closed job should only present the closed job when job list is filtered by the Closed button', async () => { + await ml.jobTable.filterByState(QuickFilterButtonTypes.Closed); + await ml.jobTable.assertJobsInTable([jobsSummaryId]); + }); + }); +} diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/single_metric_job.ts b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/single_metric_job.ts index 8b29adf3d5384..957ac090e1ade 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_jobs/single_metric_job.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_jobs/single_metric_job.ts @@ -388,5 +388,90 @@ export default function ({ getService }: FtrProviderContext) { ); await ml.api.assertNoJobResultsExist(jobIdClone); }); + + it('job cloning with too short of a job creation time range results in validation callouts', async () => { + await ml.testExecution.logTestStep('job cloning loads the job management page'); + await ml.navigation.navigateToMl(); + await ml.navigation.navigateToJobManagement(); + + await ml.testExecution.logTestStep(`cloning job: [${jobId}]`); + await ml.jobTable.clickCloneJobAction(jobId); + + await ml.testExecution.logTestStep('job cloning displays the time range step'); + await ml.jobWizardCommon.assertTimeRangeSectionExists(); + + await ml.testExecution.logTestStep('job cloning sets the time range'); + await ml.jobWizardCommon.clickUseFullDataButton( + 'Feb 7, 2016 @ 00:00:00.000', + 'Feb 11, 2016 @ 23:59:54.000' + ); + + await ml.jobWizardCommon.goToTimeRangeStep(); + + const { startDate: origStartDate } = await ml.jobWizardCommon.getSelectedDateRange(); + + await ml.testExecution.logTestStep('calculate the new end date'); + const shortDurationEndDate: string = `${origStartDate?.split(':', 1)[0]}:01:00.000`; + + await ml.testExecution.logTestStep('set the new end date'); + await ml.jobWizardCommon.setTimeRange({ endTime: shortDurationEndDate }); + + // assert time is set as expected + await ml.jobWizardCommon.assertDateRangeSelection( + origStartDate as string, + shortDurationEndDate + ); + + await ml.jobWizardCommon.advanceToPickFieldsSection(); + await ml.jobWizardCommon.advanceToJobDetailsSection(); + await ml.jobWizardCommon.assertJobIdInputExists(); + await ml.jobWizardCommon.setJobId(`${jobIdClone}-again`); + await ml.jobWizardCommon.advanceToValidationSection(); + await ml.jobWizardCommon.assertValidationCallouts([ + 'mlValidationCallout warning', + 'mlValidationCallout error', + ]); + await ml.jobWizardCommon.assertCalloutText( + 'mlValidationCallout warning', + /Time range\s*The selected or available time range might be too short/ + ); + + await ml.jobWizardCommon.goToTimeRangeStep(); + await ml.jobWizardCommon.clickUseFullDataButton( + 'Feb 7, 2016 @ 00:00:00.000', + 'Feb 11, 2016 @ 23:59:54.000' + ); + await ml.jobWizardCommon.goToValidationStep(); + await ml.jobWizardCommon.assertValidationCallouts(['mlValidationCallout success']); + await ml.jobWizardCommon.assertCalloutText( + 'mlValidationCallout success', + /Time range\s*Valid and long enough to model patterns in the data/ + ); + }); + + it('job creation and toggling model change annotation triggers enable annotation recommendation callout', async () => { + await ml.jobWizardCommon.goToJobDetailsStep(); + await ml.jobWizardCommon.ensureAdvancedSectionOpen(); + + await ml.commonUI.toggleSwitchIfNeeded('mlJobWizardSwitchAnnotations', false); + await ml.jobWizardCommon.assertAnnotationRecommendationCalloutVisible(); + + await ml.commonUI.toggleSwitchIfNeeded('mlJobWizardSwitchAnnotations', true); + await ml.jobWizardCommon.assertAnnotationRecommendationCalloutVisible(false); + }); + + it('job creation memory limit too large results in validation callout', async () => { + await ml.jobWizardCommon.goToJobDetailsStep(); + + const tooLarge = '100000000MB'; + await ml.jobWizardCommon.setModelMemoryLimit(tooLarge); + + await ml.jobWizardCommon.advanceToValidationSection(); + await ml.jobWizardCommon.assertValidationCallouts(['mlValidationCallout warning']); + await ml.jobWizardCommon.assertCalloutText( + 'mlValidationCallout warning', + /Job will not be able to run in the current cluster because model memory limit is higher than/ + ); + }); }); } diff --git a/x-pack/test/functional/apps/ml/anomaly_detection_result_views/anomaly_explorer.ts b/x-pack/test/functional/apps/ml/anomaly_detection_result_views/anomaly_explorer.ts index 549757883101f..c323356c73e6e 100644 --- a/x-pack/test/functional/apps/ml/anomaly_detection_result_views/anomaly_explorer.ts +++ b/x-pack/test/functional/apps/ml/anomaly_detection_result_views/anomaly_explorer.ts @@ -7,7 +7,6 @@ import type { Job, Datafeed } from '@kbn/ml-plugin/common/types/anomaly_detection_jobs'; import type { AnomalySwimLaneEmbeddableState } from '@kbn/ml-plugin/public'; -import type { AnomalyChartsEmbeddableInput } from '@kbn/ml-plugin/public/embeddables'; import { stringHash } from '@kbn/ml-string-hash'; import type { FtrProviderContext } from '../../../ftr_provider_context'; import { USER } from '../../../services/ml/security_common'; @@ -521,7 +520,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const expectedAttachment = { jobIds: [testData.jobConfig.job_id], maxSeriesToPlot: 6, - } as AnomalyChartsEmbeddableInput; + }; // @ts-expect-error Setting id to be undefined here // since time range expected is of the chart plotEarliest/plotLatest, not of the global time range diff --git a/x-pack/test/functional/services/ml/api.ts b/x-pack/test/functional/services/ml/api.ts index fdbbad01d003b..452abe6a54ea5 100644 --- a/x-pack/test/functional/services/ml/api.ts +++ b/x-pack/test/functional/services/ml/api.ts @@ -212,6 +212,16 @@ export function MachineLearningAPIProvider({ getService }: FtrProviderContext) { return body.hits.hits.length > 0; }, + async addForecast(jobId: string, requestBody: { duration: string }): Promise { + log.debug(`Creating forecast for ${jobId}...`); + const { body, status } = await kbnSupertest + .post(`/internal/ml/anomaly_detectors/${jobId}/_forecast`) + .set(getCommonRequestHeader('1')) + .send(requestBody); + this.assertResponseStatusCode(200, status, body); + log.debug(`> Forecast for ${jobId} created`); + }, + async assertForecastResultsExist(jobId: string) { await retry.waitForWithTimeout( `forecast results for job ${jobId} to exist`, diff --git a/x-pack/test/functional/services/ml/cases.ts b/x-pack/test/functional/services/ml/cases.ts index 016ffcb8486de..6c481df8b99a8 100644 --- a/x-pack/test/functional/services/ml/cases.ts +++ b/x-pack/test/functional/services/ml/cases.ts @@ -7,7 +7,6 @@ import type { SwimlaneType } from '@kbn/ml-plugin/public/application/explorer/explorer_constants'; import type { AnomalySwimLaneEmbeddableState } from '@kbn/ml-plugin/public'; -import type { AnomalyChartsEmbeddableInput } from '@kbn/ml-plugin/public/embeddables'; import type { FtrProviderContext } from '../../ftr_provider_context'; import type { MlAnomalySwimLane } from './swim_lane'; import type { MlAnomalyCharts } from './anomaly_charts'; @@ -71,7 +70,7 @@ export function MachineLearningCasesProvider( async assertCaseWithAnomalyChartsAttachment( params: CaseParams, - attachment: AnomalyChartsEmbeddableInput, + attachment: { id?: string; jobIds: string[]; maxSeriesToPlot: number }, expectedChartsCount: number ) { await this.assertBasicCaseProps(params); diff --git a/x-pack/test/functional/services/ml/common_ui.ts b/x-pack/test/functional/services/ml/common_ui.ts index ef2605a716dbf..282ae1aba5033 100644 --- a/x-pack/test/functional/services/ml/common_ui.ts +++ b/x-pack/test/functional/services/ml/common_ui.ts @@ -447,5 +447,9 @@ export function MachineLearningCommonUIProvider({ await testSubjects.missingOrFail(selector); } }, + + async toggleSwitchIfNeeded(testSubj: string, targetState: boolean) { + await testSubjects.setEuiSwitch(testSubj, targetState ? 'check' : 'uncheck'); + }, }; } diff --git a/x-pack/test/functional/services/ml/dashboard_embeddables.ts b/x-pack/test/functional/services/ml/dashboard_embeddables.ts index cf403bab147d8..9a5428276479e 100644 --- a/x-pack/test/functional/services/ml/dashboard_embeddables.ts +++ b/x-pack/test/functional/services/ml/dashboard_embeddables.ts @@ -117,19 +117,19 @@ export function MachineLearningDashboardEmbeddablesProvider( async openAnomalyJobSelectionFlyout( mlEmbeddableType: 'ml_anomaly_swimlane' | 'ml_anomaly_charts' | 'ml_single_metric_viewer' ) { + const name = { + ml_anomaly_swimlane: 'Anomaly swim lane', + ml_single_metric_viewer: 'Single metric viewer', + ml_anomaly_charts: 'Anomaly chart', + }; await retry.tryForTime(60 * 1000, async () => { await dashboardAddPanel.clickEditorMenuButton(); await testSubjects.existOrFail('dashboardEditorContextMenu', { timeout: 2000 }); await dashboardAddPanel.clickEmbeddableFactoryGroupButton('ml'); - if (mlEmbeddableType === 'ml_single_metric_viewer') { - await dashboardAddPanel.clickAddNewPanelFromUIActionLink('Single metric viewer'); - await testSubjects.existOrFail('mlAnomalyJobSelectionControls', { timeout: 2000 }); - } else { - await dashboardAddPanel.clickAddNewEmbeddableLink(mlEmbeddableType); - await mlDashboardJobSelectionTable.assertJobSelectionTableExists(); - } + await dashboardAddPanel.clickAddNewPanelFromUIActionLink(name[mlEmbeddableType]); + await testSubjects.existOrFail('mlAnomalyJobSelectionControls', { timeout: 2000 }); }); }, }; diff --git a/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts b/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts index 50d7738abf732..8e0c1e84b4f5d 100644 --- a/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts +++ b/x-pack/test/functional/services/ml/data_frame_analytics_creation.ts @@ -553,12 +553,12 @@ export function MachineLearningDataFrameAnalyticsCreationProvider( async assertValidationCalloutsExists() { await retry.tryForTime(4000, async () => { - await testSubjects.existOrFail('mlValidationCallout'); + await testSubjects.existOrFail('~mlValidationCallout'); }); }, async assertAllValidationCalloutsPresent(expectedNumCallouts: number) { - const validationCallouts = await testSubjects.findAll('mlValidationCallout'); + const validationCallouts = await testSubjects.findAll('~mlValidationCallout'); expect(validationCallouts.length).to.eql(expectedNumCallouts); }, diff --git a/x-pack/test/functional/services/ml/index.ts b/x-pack/test/functional/services/ml/index.ts index a2a5315bf5c50..4f25fa0808976 100644 --- a/x-pack/test/functional/services/ml/index.ts +++ b/x-pack/test/functional/services/ml/index.ts @@ -30,6 +30,7 @@ import { MachineLearningJobManagementProvider } from './job_management'; import { MachineLearningJobSelectionProvider } from './job_selection'; import { MachineLearningJobSourceSelectionProvider } from './job_source_selection'; import { MachineLearningJobTableProvider } from './job_table'; +import { MachineLearningJobExpandedDetailsProvider } from './job_expanded_details'; import { MachineLearningJobTypeSelectionProvider } from './job_type_selection'; import { MachineLearningJobWizardAdvancedProvider } from './job_wizard_advanced'; import { MachineLearningJobWizardCommonProvider } from './job_wizard_common'; @@ -122,6 +123,12 @@ export function MachineLearningProvider(context: FtrProviderContext) { const jobSelection = MachineLearningJobSelectionProvider(context); const jobSourceSelection = MachineLearningJobSourceSelectionProvider(context); const jobTable = MachineLearningJobTableProvider(context, commonUI, customUrls); + + const jobExpandedDetails = MachineLearningJobExpandedDetailsProvider( + context, + jobTable, + jobAnnotations + ); const jobTypeSelection = MachineLearningJobTypeSelectionProvider(context); const jobWizardAdvanced = MachineLearningJobWizardAdvancedProvider(context, commonUI); const jobWizardCategorization = MachineLearningJobWizardCategorizationProvider( @@ -198,6 +205,7 @@ export function MachineLearningProvider(context: FtrProviderContext) { dataVisualizerTable, forecast, jobAnnotations, + jobExpandedDetails, jobManagement, jobSelection, jobSourceSelection, diff --git a/x-pack/test/functional/services/ml/job_annotations_table.ts b/x-pack/test/functional/services/ml/job_annotations_table.ts index 89824378e7619..7945abd7e9608 100644 --- a/x-pack/test/functional/services/ml/job_annotations_table.ts +++ b/x-pack/test/functional/services/ml/job_annotations_table.ts @@ -7,7 +7,9 @@ import expect from '@kbn/expect'; +import { ProvidedType } from '@kbn/test'; import { FtrProviderContext } from '../../ftr_provider_context'; +export type MlJobAnnotations = ProvidedType; export function MachineLearningJobAnnotationsProvider({ getService }: FtrProviderContext) { const testSubjects = getService('testSubjects'); diff --git a/x-pack/test/functional/services/ml/job_expanded_details.ts b/x-pack/test/functional/services/ml/job_expanded_details.ts new file mode 100644 index 0000000000000..44e8cb9c09bfd --- /dev/null +++ b/x-pack/test/functional/services/ml/job_expanded_details.ts @@ -0,0 +1,151 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; + +import { FtrProviderContext } from '../../ftr_provider_context'; +import { MlADJobTable } from './job_table'; +import { MlJobAnnotations } from './job_annotations_table'; + +export function MachineLearningJobExpandedDetailsProvider( + { getService, getPageObject }: FtrProviderContext, + jobTable: MlADJobTable, + jobAnnotationsTable: MlJobAnnotations +) { + const testSubjects = getService('testSubjects'); + const retry = getService('retry'); + const headerPage = getPageObject('header'); + + return { + async clickEditAnnotationAction(jobId: string, annotationId: string) { + await jobAnnotationsTable.ensureAnnotationsActionsMenuOpen(annotationId); + await testSubjects.click('mlAnnotationsActionEdit'); + await testSubjects.existOrFail('mlAnnotationFlyout', { + timeout: 3_000, + }); + }, + + async assertJobRowCalendars( + jobId: string, + expectedCalendars: string[], + checkForExists: boolean = true + ): Promise { + await jobTable.withDetailsOpen(jobId, async function verifyJobRowCalendars(): Promise { + for await (const expectedCalendar of expectedCalendars) { + const calendarSelector = `mlJobDetailsCalendar-${expectedCalendar}`; + await testSubjects[checkForExists ? 'existOrFail' : 'missingOrFail'](calendarSelector, { + timeout: 3_000, + }); + if (checkForExists) + expect(await testSubjects.getVisibleText(calendarSelector)).to.be(expectedCalendar); + } + }); + }, + + async assertForecastElements(jobId: string): Promise { + await jobTable.ensureDetailsOpen(jobId); + await this.openForecastTab(jobId); + await testSubjects.existOrFail('mlJobListForecastTabOpenSingleMetricViewButton', { + timeout: 5_000, + }); + }, + + async clearSearchButton() { + if (await testSubjects.exists('clearSearchButton')) { + await testSubjects.click('clearSearchButton'); + await testSubjects.missingOrFail('clearSearchButton'); + } + }, + + async editAnnotation( + jobId: string, + newAnnotationText: string, + annotationsFromApi: any + ): Promise { + const length = annotationsFromApi.length; + expect(length).to.eql( + 1, + `Expect annotions from api to have length of 1, but got [${length}]` + ); + + await jobTable.ensureDetailsOpen(jobId); + await jobTable.openAnnotationsTab(jobId); + await this.clearSearchButton(); + + const { _id: annotationId }: { _id: string } = annotationsFromApi[0]; + + await this.clickEditAnnotationAction(jobId, annotationId); + + await testSubjects.setValue('mlAnnotationsFlyoutTextInput', newAnnotationText, { + clearWithKeyboard: true, + }); + await testSubjects.click('annotationFlyoutUpdateOrCreateButton'); + await testSubjects.missingOrFail('mlAnnotationsFlyoutTextInput'); + await jobTable.ensureDetailsClosed(jobId); + + await jobTable.withDetailsOpen(jobId, async () => { + await jobTable.openAnnotationsTab(jobId); + await this.clearSearchButton(); + const visibleText = await testSubjects.getVisibleText( + jobTable.detailsSelector(jobId, 'mlAnnotationsColumnAnnotation') + ); + expect(visibleText).to.be(newAnnotationText); + }); + }, + + async assertDataFeedFlyout(jobId: string): Promise { + await jobTable.withDetailsOpen(jobId, async () => { + await jobTable.openAnnotationsTab(jobId); + await this.clearSearchButton(); + await testSubjects.click(jobTable.detailsSelector(jobId, 'euiCollapsedItemActionsButton')); + await testSubjects.click('mlAnnotationsActionViewDatafeed'); + await testSubjects.existOrFail('mlAnnotationsViewDatafeedFlyoutChart'); + const visibleText = await testSubjects.getVisibleText( + 'mlAnnotationsViewDatafeedFlyoutTitle' + ); + expect(visibleText).to.be(`Datafeed chart for ${jobId}`); + await testSubjects.click('euiFlyoutCloseButton'); + }); + }, + + async openForecastTab(jobId: string) { + await retry.tryForTime(60_000, async () => { + await jobTable.ensureDetailsOpen(jobId); + await testSubjects.click(jobTable.detailsSelector(jobId, 'mlJobListTab-forecasts'), 3_000); + await headerPage.waitUntilLoadingHasFinished(); + await this.assertJobDetailsTabOpen('mlJobListTab-forecasts'); + }); + }, + + async assertJobDetailsTabOpen(tabSubj: string) { + const isSelected = await testSubjects.getAttribute(tabSubj, 'aria-selected'); + expect(isSelected).to.eql( + 'true', + `Expected job details tab [${tabSubj}] to be open, got: isSelected=[${isSelected}]` + ); + }, + + async openModelSnapshotTab(jobId: string) { + await jobTable.ensureDetailsOpen(jobId); + await testSubjects.click(jobTable.detailsSelector(jobId, 'mlJobListTab-modelSnapshots')); + await this.assertJobDetailsTabOpen('mlJobListTab-modelSnapshots'); + }, + + async assertModelSnapshotManagement(jobId: string): Promise { + await jobTable.withDetailsOpen(jobId, async () => { + await this.openModelSnapshotTab(jobId); + await testSubjects.existOrFail('mlADModelSnapShotRevertButton'); + await testSubjects.existOrFail('mlADModelSnapShotsEditButton'); + }); + }, + + async assertJobListMultiSelectionText(expectedMsg: string): Promise { + const visibleText = await testSubjects.getVisibleText('~mlADJobListMultiSelectActionsArea'); + expect(visibleText).to.be(expectedMsg); + }, + }; +} diff --git a/x-pack/test/functional/services/ml/job_table.ts b/x-pack/test/functional/services/ml/job_table.ts index 9e1e72cdc4f1f..97ce1858bc2f1 100644 --- a/x-pack/test/functional/services/ml/job_table.ts +++ b/x-pack/test/functional/services/ml/job_table.ts @@ -7,7 +7,7 @@ import expect from '@kbn/expect'; import { ProvidedType } from '@kbn/test'; - +import { WebElementWrapper } from '@kbn/ftr-common-functional-ui-services'; import { TimeRangeType, TIME_RANGE_TYPE, @@ -40,6 +40,12 @@ export interface OtherUrlConfig { url: string; } +export enum QuickFilterButtonTypes { + Opened = 'Opened', + Closed = 'Closed', + Started = 'Started', + Stopped = 'Stopped', +} export function MachineLearningJobTableProvider( { getPageObject, getService }: FtrProviderContext, mlCommonUI: MlCommonUI, @@ -50,6 +56,38 @@ export function MachineLearningJobTableProvider( const retry = getService('retry'); return new (class MlJobTable { + public async selectAllJobs(): Promise { + await testSubjects.click('checkboxSelectAll'); + } + + public async assertJobsInTable(expectedJobIds: string[]) { + const sortedExpectedIds = expectedJobIds.sort(); + const sortedActualJobIds = (await this.parseJobTable()).map((row) => row.id).sort(); + expect(sortedActualJobIds).to.eql( + sortedExpectedIds, + `Expected jobs in table to be [${sortedExpectedIds}], got [${sortedActualJobIds}]` + ); + } + + public async filterByState(quickFilterButton: QuickFilterButtonTypes): Promise { + const searchBar: WebElementWrapper = await testSubjects.find('mlJobListSearchBar'); + const quickFilter: WebElementWrapper = await searchBar.findByCssSelector( + `span[data-text="${quickFilterButton}"]` + ); + await quickFilter.click(); + + const searchBarButtons = await searchBar.findAllByTagName('button'); + let pressedBttnText: string = ''; + for await (const button of searchBarButtons) + if ((await button.getAttribute('aria-pressed')) === 'true') + pressedBttnText = await button.getVisibleText(); + + expect(pressedBttnText).to.eql( + quickFilterButton, + `Expected visible text of pressed quick filter button to equal [${quickFilterButton}], but got [${pressedBttnText}]` + ); + } + public async clickJobRowCalendarWithAssertion( jobId: string, calendarId: string diff --git a/x-pack/test/functional/services/ml/job_wizard_common.ts b/x-pack/test/functional/services/ml/job_wizard_common.ts index e1e5b4ea0d45b..b1671626f191f 100644 --- a/x-pack/test/functional/services/ml/job_wizard_common.ts +++ b/x-pack/test/functional/services/ml/job_wizard_common.ts @@ -26,6 +26,7 @@ export function MachineLearningJobWizardCommonProvider( const retry = getService('retry'); const testSubjects = getService('testSubjects'); const headerPage = getPageObject('header'); + const browser = getService('browser'); function advancedSectionSelector(subSelector?: string) { const subj = 'mlJobWizardAdvancedSection'; @@ -628,5 +629,78 @@ export function MachineLearningJobWizardCommonProvider( await testSubjects.existOrFail(expectedSelector); }); }, + + async assertAnnotationRecommendationCalloutVisible(expectVisible: boolean = true) { + const callOutTestSubj = 'mlJobWizardAlsoEnableAnnotationsRecommendationCallout'; + if (expectVisible) + await testSubjects.existOrFail(callOutTestSubj, { + timeout: 3_000, + }); + else + await testSubjects.missingOrFail(callOutTestSubj, { + timeout: 3_000, + }); + }, + + async goToTimeRangeStep() { + await retry.tryForTime(60_000, async () => { + await testSubjects.existOrFail('mlJobWizardTimeRangeStep'); + await testSubjects.click('mlJobWizardTimeRangeStep'); + await this.assertTimeRangeSectionExists(); + }); + }, + + async goToValidationStep() { + await retry.tryForTime(60_000, async () => { + await testSubjects.existOrFail('mlJobWizardValidationStep'); + await testSubjects.click('mlJobWizardValidationStep'); + await this.assertValidationSectionExists(); + }); + }, + + async setTimeRange({ startTime, endTime }: { startTime?: string; endTime?: string }) { + const opts = { + clearWithKeyboard: true, + typeCharByChar: true, + }; + + if (startTime) + await testSubjects.setValue('mlJobWizardDatePickerRangeStartDate', startTime, opts); + if (endTime) await testSubjects.setValue('mlJobWizardDatePickerRangeEndDate', endTime, opts); + + // escape popover + await browser.pressKeys(browser.keys.ESCAPE); + }, + + async goToJobDetailsStep() { + await testSubjects.existOrFail('mlJobWizardJobDetailsStep', { + timeout: 3_000, + }); + await testSubjects.click('mlJobWizardJobDetailsStep'); + await this.assertJobDetailsSectionExists(); + }, + + async assertValidationCallouts(expectedCallOutSelectors: string[]) { + for await (const sel of expectedCallOutSelectors) + await testSubjects.existOrFail(sel, { + timeout: 3_000, + }); + }, + + async assertCalloutText(calloutStatusTestSubj: string, expectedText: RegExp) { + const allCalloutStatusTexts = await testSubjects.getVisibleTextAll(calloutStatusTestSubj); + + const oneCalloutMatches = allCalloutStatusTexts.some( + (visibleText) => !!visibleText.match(expectedText) + ); + expect(oneCalloutMatches).to.eql( + true, + `Expect one of the callouts [${calloutStatusTestSubj}] to match [${expectedText}], instead found ${JSON.stringify( + allCalloutStatusTexts, + null, + 2 + )}` + ); + }, }; } diff --git a/x-pack/test/spaces_api_integration/common/suites/create.ts b/x-pack/test/spaces_api_integration/common/suites/create.ts index b882e328cc3a2..c7aab659ce960 100644 --- a/x-pack/test/spaces_api_integration/common/suites/create.ts +++ b/x-pack/test/spaces_api_integration/common/suites/create.ts @@ -19,6 +19,7 @@ interface CreateTests { newSpace: CreateTest; alreadyExists: CreateTest; reservedSpecified: CreateTest; + solutionSpecified: CreateTest; } interface CreateTestDefinition { @@ -63,6 +64,17 @@ export function createTestSuiteFactory(esArchiver: any, supertest: SuperTest) => { + expect(resp.body).to.eql({ + id: 'solution', + name: 'space with solution', + description: 'a description', + color: '#5c5959', + disabledFeatures: [], + solution: 'search', + }); + }; + const makeCreateTest = (describeFn: DescribeFn) => (description: string, { user = {}, spaceId, tests }: CreateTestDefinition) => { @@ -128,6 +140,24 @@ export function createTestSuiteFactory(esArchiver: any, supertest: SuperTest { + it(`should return ${tests.solutionSpecified.statusCode}`, async () => { + return supertest + .post(`${urlPrefix}/api/spaces/space`) + .auth(user.username, user.password) + .send({ + name: 'space with solution', + id: 'solution', + description: 'a description', + color: '#5c5959', + solution: 'search', + disabledFeatures: [], + }) + .expect(tests.solutionSpecified.statusCode) + .then(tests.solutionSpecified.response); + }); + }); }); }); }; @@ -142,5 +172,6 @@ export function createTestSuiteFactory(esArchiver: any, supertest: SuperTest { @@ -68,6 +69,10 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext statusCode: 403, response: expectRbacForbiddenResponse, }, + solutionSpecified: { + statusCode: 403, + response: expectRbacForbiddenResponse, + }, }, }); @@ -87,6 +92,10 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext statusCode: 200, response: expectReservedSpecifiedResult, }, + solutionSpecified: { + statusCode: 200, + response: expectSolutionSpecifiedResult, + }, }, }); @@ -106,6 +115,10 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext statusCode: 200, response: expectReservedSpecifiedResult, }, + solutionSpecified: { + statusCode: 200, + response: expectSolutionSpecifiedResult, + }, }, }); @@ -125,6 +138,10 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext statusCode: 200, response: expectReservedSpecifiedResult, }, + solutionSpecified: { + statusCode: 200, + response: expectSolutionSpecifiedResult, + }, }, }); @@ -144,6 +161,10 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext statusCode: 403, response: expectRbacForbiddenResponse, }, + solutionSpecified: { + statusCode: 403, + response: expectRbacForbiddenResponse, + }, }, }); @@ -163,6 +184,10 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext statusCode: 403, response: expectRbacForbiddenResponse, }, + solutionSpecified: { + statusCode: 403, + response: expectRbacForbiddenResponse, + }, }, }); @@ -182,6 +207,10 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext statusCode: 403, response: expectRbacForbiddenResponse, }, + solutionSpecified: { + statusCode: 403, + response: expectRbacForbiddenResponse, + }, }, }); @@ -201,6 +230,10 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext statusCode: 403, response: expectRbacForbiddenResponse, }, + solutionSpecified: { + statusCode: 403, + response: expectRbacForbiddenResponse, + }, }, }); }); diff --git a/x-pack/test/spaces_api_integration/spaces_only/apis/create.ts b/x-pack/test/spaces_api_integration/spaces_only/apis/create.ts index 4d18c9b51dd55..000d6b8f2ebe7 100644 --- a/x-pack/test/spaces_api_integration/spaces_only/apis/create.ts +++ b/x-pack/test/spaces_api_integration/spaces_only/apis/create.ts @@ -19,6 +19,7 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext expectNewSpaceResult, expectConflictResponse, expectReservedSpecifiedResult, + expectSolutionSpecifiedResult, } = createTestSuiteFactory(esArchiver, supertestWithoutAuth); describe('create', () => { @@ -45,6 +46,10 @@ export default function createSpacesOnlySuite({ getService }: FtrProviderContext statusCode: 200, response: expectReservedSpecifiedResult, }, + solutionSpecified: { + statusCode: 200, + response: expectSolutionSpecifiedResult, + }, }, }); }); diff --git a/x-pack/test_serverless/api_integration/test_suites/common/reporting/generate_csv_discover.ts b/x-pack/test_serverless/api_integration/test_suites/common/reporting/generate_csv_discover.ts index 0450ec2a3ff30..89e5f5a0de4a7 100644 --- a/x-pack/test_serverless/api_integration/test_suites/common/reporting/generate_csv_discover.ts +++ b/x-pack/test_serverless/api_integration/test_suites/common/reporting/generate_csv_discover.ts @@ -730,9 +730,7 @@ export default function ({ getService }: FtrProviderContext) { }, }) ); - await reportingAPI.waitForJobToFinish(res.path, undefined, undefined, { - timeout: 80 * 1000, - }); + await reportingAPI.waitForJobToFinish(res.path); const csvFile = await reportingAPI.getCompletedJobOutput(res.path); expect((csvFile as string).length).to.be(4826973); expectSnapshot(createPartialCsv(csvFile)).toMatch(); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/synthetics/synthetics_enablement.ts b/x-pack/test_serverless/api_integration/test_suites/observability/synthetics/synthetics_enablement.ts index 9925c00fe5748..e19bc8e227969 100644 --- a/x-pack/test_serverless/api_integration/test_suites/observability/synthetics/synthetics_enablement.ts +++ b/x-pack/test_serverless/api_integration/test_suites/observability/synthetics/synthetics_enablement.ts @@ -21,6 +21,7 @@ const ALL_ENABLED = { canEnable: true, isEnabled: true, isValidApiKey: true, + isServiceAllowed: false, }; export default function ({ getService }: FtrProviderContext) { @@ -42,6 +43,8 @@ export default function ({ getService }: FtrProviderContext) { }; describe('SyntheticsEnablement', function () { + // fails on MKI, see https://github.com/elastic/kibana/issues/184273 + this.tags(['failsOnMKI']); const svlUserManager = getService('svlUserManager'); const svlCommonApi = getService('svlCommonApi'); const supertestWithoutAuth = getService('supertestWithoutAuth'); @@ -99,6 +102,7 @@ export default function ({ getService }: FtrProviderContext) { isValidApiKey: false, // api key is not there, as it's deleted at the start of the tests isEnabled: false, + isServiceAllowed: false, }); } }); @@ -188,6 +192,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: false, isEnabled: true, isValidApiKey: true, + isServiceAllowed: false, }); }); @@ -201,6 +206,7 @@ export default function ({ getService }: FtrProviderContext) { canEnable: false, isEnabled: true, isValidApiKey: true, + isServiceAllowed: false, }); }); }); diff --git a/x-pack/test_serverless/shared/config.base.ts b/x-pack/test_serverless/shared/config.base.ts index 9c2454d4e7a39..0d0b69843820d 100644 --- a/x-pack/test_serverless/shared/config.base.ts +++ b/x-pack/test_serverless/shared/config.base.ts @@ -159,7 +159,7 @@ export default async () => { try: 120 * 1000, waitFor: 20 * 1000, esRequestTimeout: 30 * 1000, - kibanaReportCompletion: 60 * 1000, + kibanaReportCompletion: 80 * 1000, kibanaStabilize: 15 * 1000, navigateStatusPageCheck: 250, waitForExists: 2500,