diff --git a/.buildkite/scripts/steps/fips/smoke_test.sh b/.buildkite/scripts/steps/fips/smoke_test.sh index 7026c7bab941c..5c70e8c2057df 100755 --- a/.buildkite/scripts/steps/fips/smoke_test.sh +++ b/.buildkite/scripts/steps/fips/smoke_test.sh @@ -36,9 +36,9 @@ for config in "${configs[@]}"; do echo "^^^ +++" if [[ "$failedConfigs" ]]; then - failedConfigs="${failedConfigs}"$'\n'"$config" + failedConfigs="${failedConfigs}"$'\n'"- ${config}" else - failedConfigs="$config" + failedConfigs="### Failed FTR Configs"$'\n'"- ${config}" fi fi done diff --git a/.buildkite/scripts/steps/package_testing/test.sh b/.buildkite/scripts/steps/package_testing/test.sh index 99750529815c8..4917932e05228 100755 --- a/.buildkite/scripts/steps/package_testing/test.sh +++ b/.buildkite/scripts/steps/package_testing/test.sh @@ -58,12 +58,16 @@ trap "echoKibanaLogs" EXIT if [[ "$TEST_PACKAGE" == "fips" ]]; then set +e vagrant ssh $TEST_PACKAGE -t -c "/home/vagrant/kibana/.buildkite/scripts/steps/fips/smoke_test.sh" + exitCode=$? + vagrant ssh $TEST_PACKAGE -t -c "cat /home/vagrant/ftr_failed_configs 2>/dev/null" >ftr_failed_configs set -e if [ -s ftr_failed_configs ]; then - buildkite-agent meta-data set "ftr-failed-configs" <./ftr_failed_configs + cat ftr_failed_configs | buildkite-agent annotate --style "error" fi + + exit $exitCode else vagrant provision "$TEST_PACKAGE" diff --git a/.eslintrc.js b/.eslintrc.js index be63d03549bc7..ee3d32c5c1171 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -177,6 +177,7 @@ const DEV_PATTERNS = [ 'x-pack/performance/**/*', 'src/setup_node_env/index.js', 'src/cli/dev.js', + 'packages/kbn-esql-validation-autocomplete/scripts/**/*', ]; /** Restricted imports with suggested alternatives */ diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 800da589af3c9..6d677b0619e15 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-15 +date: 2024-05-16 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 8ad979c3473be..bc6c6c7e388fa 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-15 +date: 2024-05-16 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 c0f33d5f20760..f04c826eef9a3 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-15 +date: 2024-05-16 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 c06124db14d07..e73af6333db7e 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-15 +date: 2024-05-16 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 797e375771678..9903181b6fa6a 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-15 +date: 2024-05-16 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 d12b77805eb6c..b2b1e56b77543 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-15 +date: 2024-05-16 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 741774540df33..6ed0b95daa8ad 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-15 +date: 2024-05-16 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 6d4d0afcc5b9c..b872e815d58a7 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-15 +date: 2024-05-16 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 38073cf88c424..43ad957a1dbd6 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-15 +date: 2024-05-16 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 c601f8e5a3fb4..63df940e00978 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-15 +date: 2024-05-16 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 a6a0930a8e7a4..627a850f3d091 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-15 +date: 2024-05-16 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 d9aac6b38d010..5a1e7b6f469a8 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-15 +date: 2024-05-16 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 f4f0d8a4793d4..9a483c551c21a 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-15 +date: 2024-05-16 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 4e45a86fcd43b..f4e7cb47fcbe8 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-15 +date: 2024-05-16 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 4023dcea3dc28..6aec0b9d434c3 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-15 +date: 2024-05-16 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 fa21245743595..67c7128daecdf 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-15 +date: 2024-05-16 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 a06203e3c4c1a..3d7d64c78461a 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-15 +date: 2024-05-16 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 0bcc674f5663a..f9e1df34e94a2 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-15 +date: 2024-05-16 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 befd8cd34cf3e..0413b5651fbb2 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.devdocs.json b/api_docs/console.devdocs.json index 5aa8157a41915..986e786eca067 100644 --- a/api_docs/console.devdocs.json +++ b/api_docs/console.devdocs.json @@ -359,7 +359,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; isNewVersion: () => boolean; }" + ") => void; }" ], "path": "src/plugins/console/public/types/plugin_dependencies.ts", "deprecated": false, diff --git a/api_docs/console.mdx b/api_docs/console.mdx index 3e2f6add530e3..08883611c4695 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-15 +date: 2024-05-16 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 d4e39bb7e27dc..15204bfbaaef6 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-15 +date: 2024-05-16 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 90733b57ea5ec..ccd3afd2d7b93 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-15 +date: 2024-05-16 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 dea93eb9fe782..fae2434757ca3 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-15 +date: 2024-05-16 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 af9a9be0a5644..f583cf499cd61 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.devdocs.json b/api_docs/dashboard_enhanced.devdocs.json index a2a75a84fb2fd..56c455e6df7ac 100644 --- a/api_docs/dashboard_enhanced.devdocs.json +++ b/api_docs/dashboard_enhanced.devdocs.json @@ -684,7 +684,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; isNewVersion: () => boolean; }" + ") => void; }" ], "path": "x-pack/plugins/dashboard_enhanced/public/plugin.ts", "deprecated": false, diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index aa640c82b0cff..41def7fc2c39a 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-15 +date: 2024-05-16 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 6525268cc4c13..3460a1db5878c 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-15 +date: 2024-05-16 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 0b54b0bf37aa9..814f2e6e33409 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-15 +date: 2024-05-16 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 3af63d89acda5..7816b8061baa8 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-15 +date: 2024-05-16 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 6ee6e4b11577e..357d0c5ec4331 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-15 +date: 2024-05-16 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 45dd2204a032b..af308874cf2f5 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-15 +date: 2024-05-16 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 453858a611fd5..9297b18e77dba 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-15 +date: 2024-05-16 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 da898e151823d..49f3fa11de8e3 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-15 +date: 2024-05-16 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 7a18b3d53b1a5..8894797458689 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-15 +date: 2024-05-16 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 4de4ca26e8604..611341551695d 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-15 +date: 2024-05-16 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 2acf4b51e3bba..a75ee0249320a 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -61,6 +61,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | @kbn/monaco, securitySolution | - | | | fleet, cloudSecurityPosture, exploratoryView, osquery, synthetics | - | | | actions, alerting | - | +| | discover, @kbn/reporting-public | - | | | data, discover, imageEmbeddable, embeddable | - | | | @kbn/core-plugins-browser-internal, @kbn/core-root-browser-internal, home, savedObjects, unifiedSearch, visualizations, fileUpload, dashboardEnhanced, transform, dashboard, discover, dataVisualizer | - | | | @kbn/core-saved-objects-browser-mocks, discover, @kbn/core-saved-objects-browser-internal | - | @@ -121,7 +122,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | unifiedSearch | - | | | embeddableEnhanced | - | | | embeddableEnhanced | - | -| | infra, metricsDataAccess, apm, observabilityOnboarding | - | | | uiActionsEnhanced | - | | | observabilityShared | - | | | canvas | - | @@ -139,9 +139,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | visTypePie | - | | | @kbn/core-logging-server-internal, security | - | | | spaces, savedObjectsManagement | - | -| | @kbn/core-elasticsearch-server-internal, @kbn/core-plugins-server-internal, enterpriseSearch, observabilityOnboarding, console | - | | | @kbn/react-kibana-context-styled, kibanaReact | - | | | enterpriseSearch | - | +| | @kbn/core-elasticsearch-server-internal, @kbn/core-plugins-server-internal, enterpriseSearch, observabilityOnboarding, console | - | | | encryptedSavedObjects | - | | | @kbn/content-management-table-list-view, filesManagement | - | | | @kbn/core | - | @@ -211,6 +211,7 @@ Safe to remove. | | expressions | | | home | | | kibanaReact | +| | kibanaReact | | | kibanaReact | | | licensing | | | licensing | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index ca1977e5acbad..6d48bf1b4664b 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -373,6 +373,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] +## @kbn/reporting-public + +| Deprecated API | Reference location(s) | Remove By | +| ---------------|-----------|-----------| +| | [register_pdf_png_modal_reporting.tsx](https://github.com/elastic/kibana/tree/main/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx#:~:text=shareableUrlForSavedObject), [register_pdf_png_modal_reporting.tsx](https://github.com/elastic/kibana/tree/main/packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx#:~:text=shareableUrlForSavedObject) | - | + + + ## @kbn/securitysolution-data-table | Deprecated API | Reference location(s) | Remove By | @@ -442,7 +450,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/public/plugin.ts#:~:text=environment) | 8.8.0 | -| | [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/public/application/index.tsx#:~:text=KibanaThemeProvider), [index.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/public/application/index.tsx#:~:text=KibanaThemeProvider) | - | | | [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode)+ 2 more | 8.8.0 | | | [license_context.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/public/context/license/license_context.tsx#:~:text=license%24) | 8.8.0 | | | [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode), [license_check.test.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/apm/common/license_check.test.ts#:~:text=mode)+ 2 more | 8.8.0 | @@ -636,6 +643,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=create), [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=create) | - | | | [plugin.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/plugin.tsx#:~:text=registerEmbeddableFactory) | - | | | [on_save_search.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx#:~:text=SavedObjectSaveModal), [on_save_search.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/components/top_nav/on_save_search.tsx#:~:text=SavedObjectSaveModal) | 8.8.0 | +| | [get_top_nav_links.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx#:~:text=shareableUrlForSavedObject) | - | | | [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=executeTriggerActions), [saved_search_embeddable.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/saved_search_embeddable.tsx#:~:text=executeTriggerActions), [search_embeddable_factory.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/embeddable/search_embeddable_factory.ts#:~:text=executeTriggerActions), [plugin.tsx](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/plugin.tsx#:~:text=executeTriggerActions) | - | | | [discover_state.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/state_management/discover_state.test.ts#:~:text=savedObjects) | - | | | [discover_state.test.ts](https://github.com/elastic/kibana/tree/main/src/plugins/discover/public/application/main/state_management/discover_state.test.ts#:~:text=resolve) | - | @@ -812,7 +820,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/infra/public/plugin.ts#:~:text=registerEmbeddableFactory) | - | -| | [common_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx#:~:text=KibanaThemeProvider), [common_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx#:~:text=KibanaThemeProvider), [common_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx#:~:text=KibanaThemeProvider) | - | | | [saved_object_type.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/infra/server/lib/sources/saved_object_type.ts#:~:text=migrations) | - | @@ -961,14 +968,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] -## metricsDataAccess - -| Deprecated API | Reference location(s) | Remove By | -| ---------------|-----------|-----------| -| | [common_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/metrics_data_access/public/apps/common_providers.tsx#:~:text=KibanaThemeProvider), [common_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/metrics_data_access/public/apps/common_providers.tsx#:~:text=KibanaThemeProvider), [common_providers.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/metrics_data_access/public/apps/common_providers.tsx#:~:text=KibanaThemeProvider) | - | - - - ## ml | Deprecated API | Reference location(s) | Remove By | @@ -998,7 +997,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Deprecated API | Reference location(s) | Remove By | | ---------------|-----------|-----------| -| | [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_onboarding/public/application/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_onboarding/public/application/app.tsx#:~:text=KibanaThemeProvider), [app.tsx](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_onboarding/public/application/app.tsx#:~:text=KibanaThemeProvider) | - | | | [plugin.ts](https://github.com/elastic/kibana/tree/main/x-pack/plugins/observability_solution/observability_onboarding/server/plugin.ts#:~:text=legacy) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 71931c2260f21..2ad775a309d1e 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index afc7b6ed3a713..b1e08d753d260 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index fc1fe785c87e6..7952724d9e5d0 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -259,15 +259,16 @@ }, { "parentPluginId": "discover", - "id": "def-public.DiscoverAppState.index", - "type": "string", + "id": "def-public.DiscoverAppState.dataSource", + "type": "CompoundType", "tags": [], - "label": "index", + "label": "dataSource", "description": [ - "\nid of the used data view" + "\nThe current data source" ], "signature": [ - "string | undefined" + "DiscoverDataSource", + " | undefined" ], "path": "src/plugins/discover/public/application/main/state_management/discover_app_state_container.ts", "deprecated": false, diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 0d11c2f6e7a9e..a51c6e121bc7c 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 148 | 0 | 101 | 27 | +| 148 | 0 | 101 | 28 | ## Client diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 647a5c70a8e67..941e41441a33c 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-15 +date: 2024-05-16 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 a7b629b069b0f..baf360a03c07e 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-15 +date: 2024-05-16 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 e1136b1b38e1e..53b45384bf92f 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.devdocs.json b/api_docs/elastic_assistant.devdocs.json index aa0c1898b03bc..305f009d109af 100644 --- a/api_docs/elastic_assistant.devdocs.json +++ b/api_docs/elastic_assistant.devdocs.json @@ -1469,6 +1469,20 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "elasticAssistant", + "id": "def-server.AssistantToolParams.langChainTimeout", + "type": "number", + "tags": [], + "label": "langChainTimeout", + "description": [], + "signature": [ + "number | undefined" + ], + "path": "x-pack/plugins/elastic_assistant/server/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "elasticAssistant", "id": "def-server.AssistantToolParams.llm", diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 6da4f23fc7358..c44e9b4170178 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 45 | 0 | 31 | 0 | +| 46 | 0 | 32 | 0 | ## Server diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index c5b9300ac92ff..66e0d04cfa183 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-15 +date: 2024-05-16 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 fe405c9435a0a..04015ef4a968d 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-15 +date: 2024-05-16 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 ecbbdd716f5fc..5f50b6d2a374f 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-15 +date: 2024-05-16 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 aa4cd7ece5851..a56395e3551fd 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-15 +date: 2024-05-16 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 d9c6e3a0a175f..350d16f962335 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-15 +date: 2024-05-16 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 1ad998271fa4a..1dc957e6d2d6a 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-15 +date: 2024-05-16 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 a465531cd6633..b60e428341af6 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-15 +date: 2024-05-16 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 67fab675324c9..b63dba1e6cf2e 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.devdocs.json b/api_docs/exploratory_view.devdocs.json index 80f8f25a04aef..c497dbbb713bf 100644 --- a/api_docs/exploratory_view.devdocs.json +++ b/api_docs/exploratory_view.devdocs.json @@ -879,7 +879,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; isNewVersion: () => boolean; }" + ") => void; }" ], "path": "x-pack/plugins/observability_solution/exploratory_view/public/plugin.ts", "deprecated": false, diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index a4b940157bbd3..220f4967a081d 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-15 +date: 2024-05-16 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 0d55bdc38dce0..73045b4468e1e 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-15 +date: 2024-05-16 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 8c79f0bb14d59..61a1d71f765d6 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-15 +date: 2024-05-16 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 dccdc6f896e38..523a114e1e2cb 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-15 +date: 2024-05-16 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 534aa011da70d..6afb86526b829 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-15 +date: 2024-05-16 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 b4b679852ef96..6ffb985dd5a99 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-15 +date: 2024-05-16 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 1e4aa380fde51..980a58c757f0b 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-15 +date: 2024-05-16 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 129bb6b0b0e92..829a73965f30f 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-15 +date: 2024-05-16 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 24857bde432e5..73fd6d03e5ecb 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-15 +date: 2024-05-16 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 74f6afceeb2d5..94526867e6148 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-15 +date: 2024-05-16 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 939de0b35c697..fa5f044da787a 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-15 +date: 2024-05-16 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 75d31beb22f4c..d9e44a4da3710 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-15 +date: 2024-05-16 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 639a835a24625..5939e46f6936f 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-15 +date: 2024-05-16 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 9842a0cad069b..f5b7aa5cd5845 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-15 +date: 2024-05-16 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 19842bb4d0afa..16e98c2ae7717 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-15 +date: 2024-05-16 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 a26fa10f05e9d..6923aa2754f6f 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-15 +date: 2024-05-16 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 f229154684fde..4bf756dd1d889 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-15 +date: 2024-05-16 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 1795614d16902..f5de1a1f85ada 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-15 +date: 2024-05-16 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 36c79ab902af5..182acfe1b6390 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-15 +date: 2024-05-16 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 ad8a16a3aba76..a6e62076dc23d 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index 19158335f3481..b2f676f7a579b 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 5feed9780b1a0..671520298f10b 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-15 +date: 2024-05-16 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 1974ded8b2e73..0be56866276c1 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-15 +date: 2024-05-16 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 dcac7dff8353f..c4c76a646a278 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-15 +date: 2024-05-16 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 f3f9e1f18bc12..226c0c9d79faa 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-15 +date: 2024-05-16 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 7cb2f6f1be4df..ac1ed0d7ef227 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-15 +date: 2024-05-16 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 332e1bec68b8d..be5ab07e36a86 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-15 +date: 2024-05-16 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 a458c63773456..5deea1da49242 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-15 +date: 2024-05-16 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 bb11e2d3beba6..0c0d2ca29758b 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-15 +date: 2024-05-16 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 1bcd6949f2e5d..91f4cc6bbec82 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-15 +date: 2024-05-16 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 b6dc3ab4eb522..e281d483c7394 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-15 +date: 2024-05-16 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 5faf6f089cf86..484093a43dd35 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-15 +date: 2024-05-16 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 b7ae3fbdaee14..3dadb854124c5 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-15 +date: 2024-05-16 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 254d7c37fd622..b5e1c5457fa94 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-15 +date: 2024-05-16 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 3472044c5e9cd..1f94eddb6a674 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-15 +date: 2024-05-16 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 203bf51299972..0a2b8d0ffda8b 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-15 +date: 2024-05-16 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 76e346c7c2a7d..c80416028ed38 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-15 +date: 2024-05-16 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 53f4605d4f63c..1f9abea4f1533 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-15 +date: 2024-05-16 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 c6a29734574d4..5451c5ddcd328 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-15 +date: 2024-05-16 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 2c82090cc09ab..22579c3f822d2 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-15 +date: 2024-05-16 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 11b64e87783cd..41281828da834 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-15 +date: 2024-05-16 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 a000b8ffa250b..167d70babc516 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-15 +date: 2024-05-16 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 151c555a48f72..8af754a8a8134 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-15 +date: 2024-05-16 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 e308d46ab2bc1..4bd2e6f8f9de8 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-15 +date: 2024-05-16 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 50f2348bc0932..5e94d8b84521b 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-15 +date: 2024-05-16 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 49b19e007df47..b7f15489d259b 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-15 +date: 2024-05-16 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 865a1092a21c0..778d494d098d6 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-15 +date: 2024-05-16 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 314c557db82ae..e74508d4deb8d 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-15 +date: 2024-05-16 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 293fd590cc447..88eefe81fb0e1 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-15 +date: 2024-05-16 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 8242a876a94a3..1d825bbf4cb1c 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-15 +date: 2024-05-16 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 3cc650b959825..0d07b1a2e3948 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-15 +date: 2024-05-16 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 e70d18b81494b..f7b8e921503ca 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-15 +date: 2024-05-16 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 15701e0b21fe5..26a1b65232fb1 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-15 +date: 2024-05-16 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 58d28115f25d7..313225279f097 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-15 +date: 2024-05-16 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 bc614ca824dc1..dd189e1f404ab 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-15 +date: 2024-05-16 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 a5eb24c6b4f07..4f34e2d02b964 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-15 +date: 2024-05-16 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 7ba5668281bc2..78998c799a362 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-15 +date: 2024-05-16 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 17680f994eec5..90d5c01339d3c 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-15 +date: 2024-05-16 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 6b9e7791e27e9..27c57d4fcc10e 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-15 +date: 2024-05-16 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 4f005b94b66ed..50714ad160bd6 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-15 +date: 2024-05-16 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 49b665fccba11..c51b6f749cd2c 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-15 +date: 2024-05-16 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 2b83e41d519b5..86d11ebad8aad 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-15 +date: 2024-05-16 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 4ccad194f7320..6dc2a213ae99b 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-15 +date: 2024-05-16 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 c162110c2ded6..b57dbea34a842 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-15 +date: 2024-05-16 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 60dcf6d0b1fca..e582564a36996 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-15 +date: 2024-05-16 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 ba43eddc7c38b..4297a71a9ec2e 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-15 +date: 2024-05-16 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 cc4329ec95eea..44fcdb779f497 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-15 +date: 2024-05-16 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 5072900dd3a70..ac9e07ebee19e 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-15 +date: 2024-05-16 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 1f28a56b8334c..6148173599693 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-15 +date: 2024-05-16 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 04eb8aa62c919..dc387b234aea5 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-15 +date: 2024-05-16 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 5d69debff724c..fe91e549c307a 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-15 +date: 2024-05-16 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 b04b69eda250e..3dce17613c957 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-15 +date: 2024-05-16 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 096961718f319..93755213ba306 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-15 +date: 2024-05-16 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 876bfbbf07183..4402b754c1272 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-15 +date: 2024-05-16 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 2698fdf8e749d..d9d45d6991243 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-15 +date: 2024-05-16 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 fd40ddeef7004..e9857b3581be8 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-15 +date: 2024-05-16 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 508896cc2b0cb..8217caf36ae13 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-15 +date: 2024-05-16 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 ce514a79fb7eb..c7b8b882c2215 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-15 +date: 2024-05-16 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 a109d6d3a94d5..f0fe7b8c52948 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-15 +date: 2024-05-16 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 e503c23f587de..e71219c579a22 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-15 +date: 2024-05-16 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 03399131ad7d0..eadf7948210a1 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-15 +date: 2024-05-16 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 35c3b5f0f0e03..bf2762d21b99e 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-15 +date: 2024-05-16 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 31ed6da578810..75b6528cb9b2f 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-15 +date: 2024-05-16 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 56644d8198551..690edc92ea703 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-15 +date: 2024-05-16 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 4da682df10ed8..a689e6fb469dc 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-15 +date: 2024-05-16 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 71285513fdd66..e9ed2cae9ffca 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-15 +date: 2024-05-16 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 2a9b1580533ef..78384126a9f3c 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-15 +date: 2024-05-16 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 d569d27a50ac5..0071968858c41 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-15 +date: 2024-05-16 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 28425d10ba7dd..b888233b0643d 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-15 +date: 2024-05-16 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 dcc9a4b7958cf..92697fa71bb4c 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-15 +date: 2024-05-16 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 1e166185a86c7..d705949c429a4 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-15 +date: 2024-05-16 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 25379dc69e526..f549850c9770a 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-15 +date: 2024-05-16 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 90243c63e4a88..cd6f3e99ffd46 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-15 +date: 2024-05-16 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 6ddd103c44079..a6508dd639ae3 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-15 +date: 2024-05-16 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 296794e8815c6..9e6d1e512012a 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-15 +date: 2024-05-16 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 fa165f27d0311..3725941fd9159 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-15 +date: 2024-05-16 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 5f1f44b318bee..069c27e6956ad 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-15 +date: 2024-05-16 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 db4c86458d7af..69557c67d6398 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-15 +date: 2024-05-16 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 9aed7c1f3a049..1b05c031a3c2a 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-15 +date: 2024-05-16 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 609b03813f7c3..2938229af5cf6 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-15 +date: 2024-05-16 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 efb71de322d31..55af2a2b04052 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-15 +date: 2024-05-16 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 df85c0b7cecdc..20a905c16d1f7 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-15 +date: 2024-05-16 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 4e2cd9ce09fff..7c5fed8bab505 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-15 +date: 2024-05-16 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 551dcc8f1e6fc..daef39e0961f0 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-15 +date: 2024-05-16 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 b48cc8eebd43d..c5118b4045ccb 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-15 +date: 2024-05-16 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 8cf8f25fe62ef..16075136e3749 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-15 +date: 2024-05-16 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 9b812bcb4a2cd..f1e01b6677e3e 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-15 +date: 2024-05-16 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 6fb1fd1251d9e..af6e37d34a5c7 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-15 +date: 2024-05-16 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 0180a5c8d19ad..2f77ee18b1d37 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-15 +date: 2024-05-16 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 8d7500894aeb5..0868460e0e143 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-15 +date: 2024-05-16 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 77b11b112108d..510e1180c8b09 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-15 +date: 2024-05-16 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 1cb74c855b67c..c378305c3f22d 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-15 +date: 2024-05-16 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 fb7bf153c26c8..a0ca24961ac62 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-15 +date: 2024-05-16 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 ceab01df6fd63..781ef5417f39f 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-15 +date: 2024-05-16 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 a81086bccbe8b..997c63f4a5ca4 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-15 +date: 2024-05-16 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 80a686db225cc..cdd061bfc78b2 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-15 +date: 2024-05-16 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 f00d97d9e4b51..7499cc93a3cc8 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-15 +date: 2024-05-16 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 09be0d3f5f6af..745a9e38124e1 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-15 +date: 2024-05-16 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 89a5d6ddd205c..6d91445f12e7c 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-15 +date: 2024-05-16 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 147b3de50c3a3..ccecbcb9385b0 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-15 +date: 2024-05-16 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 2cbe3c2ea35a5..8d7fb99524dc8 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-15 +date: 2024-05-16 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 7957a79fb973c..f08650bad383a 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-15 +date: 2024-05-16 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 98be7556e9ed1..31d7dca79e9c5 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-15 +date: 2024-05-16 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 8104ad2ec2199..3bb354475ff7c 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-15 +date: 2024-05-16 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 b5ce524228214..0906d107519e0 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-15 +date: 2024-05-16 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 0e27860682b14..c55c038bc5a74 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-15 +date: 2024-05-16 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 0f4cc03a767c1..84bcfe562c0d8 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-15 +date: 2024-05-16 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 9426761ff21bc..03350ba3d06a4 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-15 +date: 2024-05-16 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 3421ed047f985..8950e76ac4739 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-15 +date: 2024-05-16 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 f92f4516ef9b6..32aaeea7ed062 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-15 +date: 2024-05-16 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 b50316bd575d3..508e18c979d2b 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-15 +date: 2024-05-16 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 9dbe6dd9bd930..bd6a6c7b30ce1 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-15 +date: 2024-05-16 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 c43c9fd36bc51..824ceb81a22d3 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-15 +date: 2024-05-16 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 5eb02f64ed9d9..fe462fd32358d 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-15 +date: 2024-05-16 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 d3e6895d10bef..bd3e38f873af2 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-15 +date: 2024-05-16 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 f3a192082e319..71a814a919c61 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-15 +date: 2024-05-16 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 5d5143a81ce1d..74d54f95b306f 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-15 +date: 2024-05-16 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 2b50fd7a4e706..d4e471d6c15c1 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-15 +date: 2024-05-16 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 66e7c76279558..13fc9e5b743ad 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-15 +date: 2024-05-16 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 6232954cf0dc6..9cb9cc0201c09 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-15 +date: 2024-05-16 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 485fca6cec266..08190d1483573 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-15 +date: 2024-05-16 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 6464b288207cf..b2e5c49847b70 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-15 +date: 2024-05-16 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 0fd6f9e1c5a7a..143757c9a5c52 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-15 +date: 2024-05-16 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 689dfa385631c..e800eb4157bc3 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-15 +date: 2024-05-16 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 614ae03aefa53..c663c3c117c52 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-15 +date: 2024-05-16 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 47c2216cb90d6..d748890aaa800 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-15 +date: 2024-05-16 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 33912a902a670..a6931d53482ab 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-15 +date: 2024-05-16 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 b7068bc017571..2f0741b73882e 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-15 +date: 2024-05-16 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 5120ab108bf1a..74d82823865ac 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-15 +date: 2024-05-16 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 f66bc70244d89..71d2d9056a41a 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-15 +date: 2024-05-16 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 aa1c365d392fa..01a0c79507592 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-15 +date: 2024-05-16 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 bce96d98492a7..7d0404dc61a8e 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-15 +date: 2024-05-16 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 fc2688baf60da..bb2353baf29cb 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-15 +date: 2024-05-16 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 8e9a5c375d7e1..c8b381e62b708 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-15 +date: 2024-05-16 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 87d2ce1515b82..e7e2f8282fa68 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-15 +date: 2024-05-16 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 fd9b4f08fc7a8..cbac2e832e608 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-15 +date: 2024-05-16 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 e68b9ad77e273..c45db8af105ae 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-15 +date: 2024-05-16 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 29ad732a6bc0c..dbf54f2de2589 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-15 +date: 2024-05-16 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 dcf4c579527bc..6b24171594fd6 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-15 +date: 2024-05-16 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 24cc6ca4c6522..a6f3e1349b4e6 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-15 +date: 2024-05-16 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 2c0efbf88ee96..d28c80ddfbd2e 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-15 +date: 2024-05-16 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 b46bbeccebc1d..0598d9c2b8db2 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-15 +date: 2024-05-16 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 dade468cb4fcf..754d285784bf9 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-15 +date: 2024-05-16 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 f4e4bf5f1fac3..590893a90cb57 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-15 +date: 2024-05-16 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 74caad45fe363..c8a2b600eaa04 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-15 +date: 2024-05-16 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 9d5f35727dfd6..6b249c791d4ec 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-15 +date: 2024-05-16 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 838074ea58ba9..2989480912a13 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-15 +date: 2024-05-16 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 fb1cd78b04d64..e836d03adce60 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-15 +date: 2024-05-16 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 98a2ab58b43f2..65344413b0abb 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-15 +date: 2024-05-16 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 b744938b1e5f4..c8bf769ee1c0a 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-15 +date: 2024-05-16 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 1664ca5f47c89..88cd5aad5e94b 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-15 +date: 2024-05-16 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 a568953f77031..0ba5087c39f72 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-15 +date: 2024-05-16 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 2f12ad8656168..3269c9a08ec78 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-15 +date: 2024-05-16 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 61eafce2e8d89..ba40766b91324 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-15 +date: 2024-05-16 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 67d28d62996c3..efcc8448e2f08 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-15 +date: 2024-05-16 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 57445b1d42edb..163ccd3de0a5c 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-15 +date: 2024-05-16 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 3da04dba86de5..724f3304476e3 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-15 +date: 2024-05-16 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 5970ab18366e5..2a5904ad34273 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-15 +date: 2024-05-16 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 77e16b71a4d6f..f91de95813ed9 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-15 +date: 2024-05-16 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 25d6b5e66ddfc..32205b46dd043 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-15 +date: 2024-05-16 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 714329093a89a..792172a4c18e8 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-15 +date: 2024-05-16 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 2d99cade53e18..8c14d60c0fbc6 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-15 +date: 2024-05-16 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 f719518c0a2ba..0b8b77c7af6a0 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-15 +date: 2024-05-16 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 3d92dd835bb46..bf6c4692d7885 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-15 +date: 2024-05-16 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 c3f50e3690bed..ec79b1c0d06ec 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-15 +date: 2024-05-16 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 6524bab9137cb..12d9a451b5251 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-15 +date: 2024-05-16 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 6fd7783010d3f..3dbccd7d57226 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-15 +date: 2024-05-16 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 a6bcd8696a437..983a333cdfd89 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-15 +date: 2024-05-16 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 45a70837dab6f..28651dda40c51 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-15 +date: 2024-05-16 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 1b7901bb8f259..942f49342587b 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-15 +date: 2024-05-16 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 28a572bc4c59f..614849ea3a7c3 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-15 +date: 2024-05-16 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 66a34e2a6aff3..1f0294bedf94e 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-15 +date: 2024-05-16 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 03b48395f0408..7bae2adb00007 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-15 +date: 2024-05-16 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 564f67f17a2a7..beee3376da0a7 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-15 +date: 2024-05-16 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 71e0985a1cc58..173e104c2bada 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.devdocs.json b/api_docs/kbn_core_saved_objects_api_server.devdocs.json index aedee305b452f..16b357ec819c6 100644 --- a/api_docs/kbn_core_saved_objects_api_server.devdocs.json +++ b/api_docs/kbn_core_saved_objects_api_server.devdocs.json @@ -3865,6 +3865,22 @@ "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/bulk_update.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObjectsBulkUpdateObject.mergeAttributes", + "type": "CompoundType", + "tags": [], + "label": "mergeAttributes", + "description": [ + "\nBy default, update will merge the provided attributes with the ones present on the document\n(performing a standard partial update). Setting this option to `false` will change the behavior, performing\na \"full\" update instead, where the provided attributes will fully replace the existing ones.\nDefaults to `true`." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/bulk_update.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false @@ -8041,6 +8057,22 @@ "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "@kbn/core-saved-objects-api-server", + "id": "def-common.SavedObjectsUpdateOptions.mergeAttributes", + "type": "CompoundType", + "tags": [], + "label": "mergeAttributes", + "description": [ + "\nBy default, update will merge the provided attributes with the ones present on the document\n(performing a standard partial update). Setting this option to `false` will change the behavior, performing\na \"full\" update instead, where the provided attributes will fully replace the existing ones.\nDefaults to `true`." + ], + "signature": [ + "boolean | undefined" + ], + "path": "packages/core/saved-objects/core-saved-objects-api-server/src/apis/update.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 57a49fd89ea8c..7501f41dac5f6 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 354 | 1 | 5 | 2 | +| 356 | 1 | 5 | 2 | ## Common 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 3c02bc250ad7d..d89c3daddb95c 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-15 +date: 2024-05-16 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.devdocs.json b/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json index 0aa3e7ceaa6a2..22752cea44fca 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json +++ b/api_docs/kbn_core_saved_objects_base_server_internal.devdocs.json @@ -2304,17 +2304,6 @@ "deprecated": false, "trackAdoption": false }, - { - "parentPluginId": "@kbn/core-saved-objects-base-server-internal", - "id": "def-common.HASH_TO_VERSION_MAP.ad_hoc_run_params6aa8806a2e27d3be492a1da0d7721845", - "type": "string", - "tags": [], - "label": "'ad_hoc_run_params|6aa8806a2e27d3be492a1da0d7721845'", - "description": [], - "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts", - "deprecated": false, - "trackAdoption": false - }, { "parentPluginId": "@kbn/core-saved-objects-base-server-internal", "id": "def-common.HASH_TO_VERSION_MAP.alert96a5a144778243a9f4fece0e71c2197f", @@ -2878,10 +2867,10 @@ }, { "parentPluginId": "@kbn/core-saved-objects-base-server-internal", - "id": "def-common.HASH_TO_VERSION_MAP.ingestagentpolicies0ab9774bc7728d0c0f37d841570f2872", + "id": "def-common.HASH_TO_VERSION_MAP.ingestagentpolicies0fd93cd11c019b118e93a9157c22057b", "type": "string", "tags": [], - "label": "'ingest-agent-policies|0ab9774bc7728d0c0f37d841570f2872'", + "label": "'ingest-agent-policies|0fd93cd11c019b118e93a9157c22057b'", "description": [], "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts", "deprecated": false, @@ -2911,10 +2900,10 @@ }, { "parentPluginId": "@kbn/core-saved-objects-base-server-internal", - "id": "def-common.HASH_TO_VERSION_MAP.ingestpackagepoliciesca63c4c5a946704f045803a6b975dbc6", + "id": "def-common.HASH_TO_VERSION_MAP.ingestpackagepoliciesa1a074bad36e68d54f98d2158d60f879", "type": "string", "tags": [], - "label": "'ingest-package-policies|ca63c4c5a946704f045803a6b975dbc6'", + "label": "'ingest-package-policies|a1a074bad36e68d54f98d2158d60f879'", "description": [], "path": "packages/core/saved-objects/core-saved-objects-base-server-internal/src/constants.ts", "deprecated": false, 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 e8de1b067592f..8d4b1bada6a17 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 226 | 0 | 183 | 11 | +| 225 | 0 | 182 | 11 | ## Common 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 e9ffb46b6f3be..ad76fb69c6b3e 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-15 +date: 2024-05-16 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 03047ab168dd6..a41ef025bc393 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-15 +date: 2024-05-16 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 b21d09960cdcb..eea26e1d6f2a8 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-15 +date: 2024-05-16 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 e737597ce5937..ee912df1d5ade 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-15 +date: 2024-05-16 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 f33bd3ddbb28c..d675cdeb9ee42 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-15 +date: 2024-05-16 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 f1ef19dc0148d..3e50096fc8a58 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-15 +date: 2024-05-16 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 ac0294efbc4ca..949b094522ef1 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-15 +date: 2024-05-16 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 ddd6bb9e62083..2177b1b8373e5 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-15 +date: 2024-05-16 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 d14a7bb9026a7..0a061496ea2dc 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-15 +date: 2024-05-16 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 9b94ed9dcab7b..9f977ef8a647e 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-15 +date: 2024-05-16 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 59655539c2cd7..bb4d385dd23d1 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-15 +date: 2024-05-16 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 f4a06a7466168..3c4ca5fb11135 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-15 +date: 2024-05-16 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 01836d711f948..5985c2bb53d43 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-15 +date: 2024-05-16 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 afdbdc0d78e0a..4ae30030a7bcc 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-15 +date: 2024-05-16 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 18054d99fbf87..464dbeeb78c55 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-15 +date: 2024-05-16 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 08fb0c61e2e97..1bfe8202f819d 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-15 +date: 2024-05-16 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 a526a4f00c739..550c7ee2d174c 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-15 +date: 2024-05-16 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 fc666846d0170..a47d088d95071 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-15 +date: 2024-05-16 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 e34744a32f5dc..976685c74fe2f 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-15 +date: 2024-05-16 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 50f2ddf77f5bb..8f89a2db2c49d 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-15 +date: 2024-05-16 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 34f9acce26d24..213ad98bd2e3c 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-15 +date: 2024-05-16 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 e62a9a3833bf1..37ff44574b2dd 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-15 +date: 2024-05-16 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 ae4c286fd8073..91f9295cbc5be 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-15 +date: 2024-05-16 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 7862df0e7e52b..e54304728bb19 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-15 +date: 2024-05-16 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 ac74f71b52ecc..7c5cab677b63d 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-15 +date: 2024-05-16 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 56254fccad70f..2f4139687a853 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-15 +date: 2024-05-16 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 0fadd3425b286..ebac7a0d19a17 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-15 +date: 2024-05-16 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 18e3b3d876361..3cb0613ddcc29 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-15 +date: 2024-05-16 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 a02f80de152dc..c621428bc5c16 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-15 +date: 2024-05-16 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 10054b63fa106..41717d02ebda0 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-15 +date: 2024-05-16 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 5089f1812eb0c..5dbd0fe47d419 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-15 +date: 2024-05-16 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 82576a0e3845d..69a121f9d8727 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-15 +date: 2024-05-16 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 2a4f7f460bd84..bb7e1cb54c324 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-15 +date: 2024-05-16 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 d33b7094096a4..47c96e90f1a56 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-15 +date: 2024-05-16 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 cd5441745b9e8..916abc90e50aa 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-15 +date: 2024-05-16 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 bf0e3e4286a42..babdcecccca13 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-15 +date: 2024-05-16 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 f78ee8d8a8021..9a91bc8af2832 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-15 +date: 2024-05-16 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 49ffab6bda9b9..33ac9cd874775 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-15 +date: 2024-05-16 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 277622eb99b82..14c86f96ad64e 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-15 +date: 2024-05-16 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 178e9235e6baf..509bf5ffbd485 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-15 +date: 2024-05-16 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 c9ea97946120a..c64a7e09fb80d 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-15 +date: 2024-05-16 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 7a4f1370bcecd..26122235e86af 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-15 +date: 2024-05-16 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 91dee9417b01e..9d09b1b4c8d11 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-15 +date: 2024-05-16 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 6b7d79a55bf3e..3a423d1392e2e 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-15 +date: 2024-05-16 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 a50d1426639f0..2cacf48a952b6 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-15 +date: 2024-05-16 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 43980dc292e5a..efcab025912a0 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-15 +date: 2024-05-16 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 af5b2279d016a..704eb2eca7cad 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-15 +date: 2024-05-16 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 5b641b9353f8e..1051ea1056ab4 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-15 +date: 2024-05-16 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 47717ac5695b0..06aef9bfae569 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-15 +date: 2024-05-16 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 d05562f65a793..35a8a1dad00ec 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-15 +date: 2024-05-16 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 fb1065cfba2cf..41c5300faf2f3 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-15 +date: 2024-05-16 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 a414652b1ff13..ee8688883f053 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-15 +date: 2024-05-16 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 b2611dda1c370..5949bd5960c1d 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-15 +date: 2024-05-16 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 6af8cddb25989..a4ecdcad0cc3d 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-15 +date: 2024-05-16 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 6e2988e385dc2..f7fb94ce846fa 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-15 +date: 2024-05-16 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 c1576dabbbae4..20780b9f3e6eb 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-15 +date: 2024-05-16 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 79e493b8e6730..cfec3b57d7313 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-15 +date: 2024-05-16 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 500de975c6b30..c907243a61786 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-15 +date: 2024-05-16 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 aef0129149fdd..b82222aaa03a6 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-15 +date: 2024-05-16 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 8974333ee5b37..8b5df9f42372e 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-15 +date: 2024-05-16 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 d335512606462..50cfefb4d0524 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-15 +date: 2024-05-16 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 08be635398709..7f6779a772c18 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-15 +date: 2024-05-16 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 b3c6260d9e73a..13c43496b9e5d 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-15 +date: 2024-05-16 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 bb69a3e584e82..b600b5be8ad2e 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-15 +date: 2024-05-16 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 5de6426cfce38..0b4123bbc1a7d 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-15 +date: 2024-05-16 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 c1e551550b7b2..8e16d449af436 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-15 +date: 2024-05-16 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 8c82638c584ca..55f8ba8822713 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-15 +date: 2024-05-16 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 93d4a457a73d5..e91c7b8196936 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-15 +date: 2024-05-16 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 022b1e4021f0a..fcbb77e852a40 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-15 +date: 2024-05-16 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 e9a5fb3b222bf..af8be0fa8f5a1 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-15 +date: 2024-05-16 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 5ac3e89c94c9f..c47b419b735be 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-15 +date: 2024-05-16 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 6cc29d19b3706..4f7f43dd2a8da 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-15 +date: 2024-05-16 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 e757bc0790fa4..75d4725ef357b 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-15 +date: 2024-05-16 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 5da6f405cbec6..363b55c0d16a2 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-15 +date: 2024-05-16 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 dbd52dc4f2e28..a3fdf8e052d2f 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-15 +date: 2024-05-16 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 709d24b5d1bcd..9e625d94b1890 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-15 +date: 2024-05-16 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 33c7234812097..e71eef2a1bc8c 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-15 +date: 2024-05-16 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 27b9d4547f2f8..d3b9373be0271 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-15 +date: 2024-05-16 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 e0ecd46c7012a..db6b87a2dd9bc 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-15 +date: 2024-05-16 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 f9c0e318f4e5d..baef7cbcccd26 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-15 +date: 2024-05-16 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 25e279b9f9f2a..bf85dc5df4955 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-15 +date: 2024-05-16 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 a2408a3882cca..415b2a02b41b8 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-15 +date: 2024-05-16 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 1b934ba204ec4..402bfbb3f90c4 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-15 +date: 2024-05-16 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 b9631fb61aa16..dab4c21a23621 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-15 +date: 2024-05-16 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 9b0c34843da5f..dbf8449d62373 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-15 +date: 2024-05-16 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 ff67c8ca941e8..06898632b335c 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-15 +date: 2024-05-16 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 c76b74dc9f4d5..502e690f46bb0 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-15 +date: 2024-05-16 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 7aa49285ce666..285fd33c75287 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 0f51d14a01d47..bbe24a2dccc9b 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-15 +date: 2024-05-16 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 d35e9fe91aeca..9b179f7ab7e87 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-15 +date: 2024-05-16 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 c2492cb1d93f8..560f2b4d0efe0 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-15 +date: 2024-05-16 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 a22a852d38358..a87e0d01ae416 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-15 +date: 2024-05-16 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 898c0822194e7..f2560bdbe8d85 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-15 +date: 2024-05-16 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 28f8f9d1de73f..c6c6c0611a875 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-15 +date: 2024-05-16 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 ac39fa5b18949..0d937df6592c8 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-15 +date: 2024-05-16 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 41cdc11cfe45d..814e18f14cf5e 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-15 +date: 2024-05-16 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.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 10019eee1c1dc..91e3ead1350fd 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index 64748daa243b8..7d831c380ee2c 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-15 +date: 2024-05-16 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 e4eca2e1466ed..ddcba759bd1bb 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-15 +date: 2024-05-16 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 3486dfc476cbf..3d971abf8407c 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-15 +date: 2024-05-16 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 b2789cf6f112e..04ad5a32c856b 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-15 +date: 2024-05-16 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 3ced08f2fab8b..633fb83ee7041 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-15 +date: 2024-05-16 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 deecec3938b7d..ae3ee63ee0574 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-15 +date: 2024-05-16 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 ecfb09ecd064e..8a48773d6a634 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-15 +date: 2024-05-16 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 fbe5db40934f3..01e0892d148d9 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-15 +date: 2024-05-16 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 f15604af898be..e8528064fd964 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-15 +date: 2024-05-16 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 8812990f8c5a0..2fcf761909de9 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-15 +date: 2024-05-16 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 76dd71b3fae6f..6cc4a893d35c9 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-15 +date: 2024-05-16 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 22f0cd9a95df9..b7e80fcd2dd84 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-15 +date: 2024-05-16 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 0bd066ed74aa9..15657f39b8393 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-15 +date: 2024-05-16 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 db90b46c353c2..1a246c914a016 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-15 +date: 2024-05-16 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 14f8af50fefe8..24b6ad03908c1 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-15 +date: 2024-05-16 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 6183e408531f7..06d2ac4f3792a 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-15 +date: 2024-05-16 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 24a3d0884dc09..09ac4afcf3651 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-15 +date: 2024-05-16 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 0bfe5fd1eb3d3..9e8a77a0bde68 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-15 +date: 2024-05-16 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 091d64bb0efb3..b80c8b49f39a8 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-15 +date: 2024-05-16 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 0ef1fe2a989a8..b2e6437117528 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-15 +date: 2024-05-16 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 cc09b67e2548e..fc4e4023935bf 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-15 +date: 2024-05-16 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 88e5c011d7ba4..522045b7c9681 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-15 +date: 2024-05-16 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 d87fbce0ba12d..a03b8fb0dfb9e 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-15 +date: 2024-05-16 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 00b3b3fe8f67d..5eb8b76dfc8db 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-15 +date: 2024-05-16 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 86a41b523ac25..c90abbce90fa1 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-15 +date: 2024-05-16 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 a5484f44efca6..9cf87176d5f1b 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-15 +date: 2024-05-16 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 777b20aca7cec..b203fc2516fdb 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-15 +date: 2024-05-16 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 932d861b8b641..fe5622055d71b 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-15 +date: 2024-05-16 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 a05bdfafcc663..aa9f296afcfb2 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-15 +date: 2024-05-16 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 3bc4fef73b1c4..fe5c456b61fc0 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-15 +date: 2024-05-16 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 b0df0bc84c739..1f3a9b93b94f5 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-15 +date: 2024-05-16 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 7fddff24ad7f7..1fcb554a8919b 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-15 +date: 2024-05-16 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 356cbf54de057..d041f048782be 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-15 +date: 2024-05-16 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 952bbf193f376..6e8990daf040c 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-15 +date: 2024-05-16 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 66c0217ea7902..af1f09d93641b 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-15 +date: 2024-05-16 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 1bf8f88cc721d..f85178aa2f7c0 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-15 +date: 2024-05-16 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 062abaa1badbb..45c75bd11ea9c 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-15 +date: 2024-05-16 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 1fb3ce7743960..49419565ee1da 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-15 +date: 2024-05-16 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 8bb1673fc03e2..e56190abe6db0 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-15 +date: 2024-05-16 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 2a3960f06f7d6..6e2a342d7864f 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-15 +date: 2024-05-16 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 e56e85ff436e1..1f565f99ba23d 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-15 +date: 2024-05-16 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 eec1a73b4fd13..8aadf9f1d589c 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-15 +date: 2024-05-16 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 d5e3496868934..fefcefacd32c6 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-15 +date: 2024-05-16 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 c17f916b61ed5..fd44b889d251a 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-15 +date: 2024-05-16 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 5a17ea7a34d1c..961e7b7e26409 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 79964bd68fa21..297d57dcf33c2 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-15 +date: 2024-05-16 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 e868909f2da25..0399496f900ea 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-15 +date: 2024-05-16 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 b8900af65be73..49180bbb02e57 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-15 +date: 2024-05-16 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 7b07680402751..da99f5e9f1271 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-15 +date: 2024-05-16 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 871a503cef1c7..de5c1110c2404 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-15 +date: 2024-05-16 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 8d633465848df..abb534d9be1a2 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-15 +date: 2024-05-16 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 c7966fac829d5..e952df482cf47 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-15 +date: 2024-05-16 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 8291f41a76ace..ac43b164b2534 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-15 +date: 2024-05-16 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 35e9b32778b0a..d5ea92226e837 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-15 +date: 2024-05-16 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 4d4d7503bd991..8aaca7383fda2 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-15 +date: 2024-05-16 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 fa157aec89958..cfff61a6d388c 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-15 +date: 2024-05-16 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 13d0807033452..066dd0af7acd2 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-15 +date: 2024-05-16 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 42207e1d3de0e..1dc691ed14ac1 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-15 +date: 2024-05-16 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 21a0cd6150a3f..68beb5c99a0b1 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-15 +date: 2024-05-16 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 43d920ef940b2..2ec314b6d2f2f 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-15 +date: 2024-05-16 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 98bd537659d5d..bc36c983a8e58 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-15 +date: 2024-05-16 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 cc9add9874ac8..54904f9dcf01a 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-15 +date: 2024-05-16 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 abd5d961e4586..ace9ba9a7a16c 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-15 +date: 2024-05-16 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 a60edd5e5c3de..6cc9a25f58261 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-15 +date: 2024-05-16 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 3ebe85bc8ef3c..be7e72f1acd6e 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-15 +date: 2024-05-16 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 910ec25e7088d..e42d2355c629e 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-15 +date: 2024-05-16 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 dc6a77febc339..df050e23b8ea3 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-15 +date: 2024-05-16 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 4d207bbaae650..bcddcebaee35b 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-15 +date: 2024-05-16 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 90a91d5d4633c..cd110f90c86da 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-15 +date: 2024-05-16 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 44506ab4a159b..e690148f10f0e 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-15 +date: 2024-05-16 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 a85a6ddec5d5b..8fa568ecb2db4 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-15 +date: 2024-05-16 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 9ec9f938278d8..3f488dc0d0f82 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-15 +date: 2024-05-16 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 3f8fbdafaad35..f39a80437742a 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-15 +date: 2024-05-16 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 519ad4ca96761..7660ee4fbce76 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-15 +date: 2024-05-16 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 ef8688ca5fa17..0b10962df3c63 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-15 +date: 2024-05-16 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 e2d148659a9e7..446045a85c68d 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-15 +date: 2024-05-16 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 983c2eea42fd5..00fb6b3e1c9a4 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-15 +date: 2024-05-16 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 92a050f7f0646..0623299e03f7e 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-15 +date: 2024-05-16 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 0e9064242d478..9292911bd5c30 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-15 +date: 2024-05-16 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 0c086fa94649b..f16ab074bb6cc 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-15 +date: 2024-05-16 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 4ebc72f1fde6d..9c4da7bb006fb 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-15 +date: 2024-05-16 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 5988e238a7a97..2a259d02cbe57 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-15 +date: 2024-05-16 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 9770582366846..46db2baac7725 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-15 +date: 2024-05-16 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 04cabde325ad8..6a499920eb57b 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-15 +date: 2024-05-16 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 d8fb8c9befaf7..893394d5f2309 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-15 +date: 2024-05-16 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 9160da169ffbf..17a3a3363b47f 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-15 +date: 2024-05-16 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 4e451086759f7..30062861db8aa 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-15 +date: 2024-05-16 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 d8f9be4b766d5..19e8f1ef457c7 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-15 +date: 2024-05-16 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 6e31205928893..5988d319eec88 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-15 +date: 2024-05-16 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 515303b0d0a9a..ef342a31fa9e9 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-15 +date: 2024-05-16 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 c747a58c85640..3115d92cca918 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-15 +date: 2024-05-16 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 c516b762096a6..70c0cd1635403 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-15 +date: 2024-05-16 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 bccba46914d4d..b7272bf02596d 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-15 +date: 2024-05-16 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 169cec38e8059..2dc3d4b1f5564 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-15 +date: 2024-05-16 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 962f8be4adc64..5c5db58273a13 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-15 +date: 2024-05-16 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 e0a2539691230..1d19fc6153c52 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-15 +date: 2024-05-16 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 2cc85d339e823..b3473decf8180 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-15 +date: 2024-05-16 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 9b9f8190c346a..d6dff54af4bfc 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-15 +date: 2024-05-16 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 8b0fed3c94eb5..b95dab9985f24 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-15 +date: 2024-05-16 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 e863cfbcc411e..d2ff18342228f 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-15 +date: 2024-05-16 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 b9d108459e2ab..3d38276562ee3 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-15 +date: 2024-05-16 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 33eb4b1812483..1a02d530677ff 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-15 +date: 2024-05-16 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 dcfe7f0f85e79..f211ee67186c1 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-15 +date: 2024-05-16 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 b2f34bae12392..939b04a827589 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-15 +date: 2024-05-16 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 7c29bc28f0974..f16b1d5406a9b 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-15 +date: 2024-05-16 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 6d1dbfd05ecbe..8e79c9fa63789 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-15 +date: 2024-05-16 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 07d282eb94756..99213d80d4b0c 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-15 +date: 2024-05-16 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 817be2823ccc7..19a4ffd6a4797 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-15 +date: 2024-05-16 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 b863b9b8f5cbf..f8081532d763c 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-15 +date: 2024-05-16 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 3cf8e68abad76..01da4c545fd1b 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-15 +date: 2024-05-16 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 522fa76e065be..cb3e30a4c8bdc 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-15 +date: 2024-05-16 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 34793ebe4dcd7..5f62dc6463774 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-15 +date: 2024-05-16 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 0f7c9bd0ce255..834913754d3e9 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-15 +date: 2024-05-16 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 b8bd93318aad4..f1993c9dc6974 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-15 +date: 2024-05-16 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 ca4edd05fb810..0baedd862b84b 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-15 +date: 2024-05-16 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 2e44803d4e8eb..55d777ede8542 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-15 +date: 2024-05-16 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 d6bfced2e826b..72cbe897839b5 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-15 +date: 2024-05-16 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 4fff3cbb05a7d..917278e0379be 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-15 +date: 2024-05-16 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 39259ccf797b7..f4c24fbe6e150 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-15 +date: 2024-05-16 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.devdocs.json b/api_docs/kbn_reporting_public.devdocs.json index d6ed8238232b2..aaa1f39f74c06 100644 --- a/api_docs/kbn_reporting_public.devdocs.json +++ b/api_docs/kbn_reporting_public.devdocs.json @@ -1194,6 +1194,63 @@ ], "returnComment": [] }, + { + "parentPluginId": "@kbn/reporting-public", + "id": "def-public.ReportingAPIClient.createReportingShareJob", + "type": "Function", + "tags": [], + "label": "createReportingShareJob", + "description": [], + "signature": [ + "(exportType: string, jobParams: ", + "BaseParams", + ") => Promise<", + { + "pluginId": "@kbn/reporting-public", + "scope": "public", + "docId": "kibKbnReportingPublicPluginApi", + "section": "def-public.Job", + "text": "Job" + }, + " | undefined>" + ], + "path": "packages/kbn-reporting/public/reporting_api_client.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/reporting-public", + "id": "def-public.ReportingAPIClient.createReportingShareJob.$1", + "type": "string", + "tags": [], + "label": "exportType", + "description": [], + "signature": [ + "string" + ], + "path": "packages/kbn-reporting/public/reporting_api_client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/reporting-public", + "id": "def-public.ReportingAPIClient.createReportingShareJob.$2", + "type": "Object", + "tags": [], + "label": "jobParams", + "description": [], + "signature": [ + "BaseParams" + ], + "path": "packages/kbn-reporting/public/reporting_api_client.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "@kbn/reporting-public", "id": "def-public.ReportingAPIClient.createReportingJob", diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 1c9e4f41ff319..4271e03b4adbd 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 110 | 0 | 104 | 2 | +| 113 | 0 | 107 | 2 | ## Client diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 07bc8954f0754..5b1f1cbb75d4b 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-15 +date: 2024-05-16 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 6e134ad9c64d3..697ee4e73a921 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-15 +date: 2024-05-16 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 543648963942a..f9b9e50825e7f 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-15 +date: 2024-05-16 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 37dbc962e5a2e..1b70f82179fcf 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-15 +date: 2024-05-16 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 2ee020cded88f..3ac83c9da4088 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-15 +date: 2024-05-16 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 c976712f27a8e..65435c955102a 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-15 +date: 2024-05-16 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 c9b97ce7a5132..fc45e0583c934 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-15 +date: 2024-05-16 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 6d41685d91949..3a04b271ffa77 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-15 +date: 2024-05-16 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 5b31296005a0b..0761b37a04863 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-15 +date: 2024-05-16 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.devdocs.json b/api_docs/kbn_search_connectors.devdocs.json index 06416d03aa67e..1536cc0f405c5 100644 --- a/api_docs/kbn_search_connectors.devdocs.json +++ b/api_docs/kbn_search_connectors.devdocs.json @@ -2048,7 +2048,7 @@ "section": "def-common.ConnectorConfiguration", "text": "ConnectorConfiguration" }, - ">" + " | undefined>" ], "path": "packages/kbn-search-connectors/lib/update_connector_configuration.ts", "deprecated": false, @@ -12227,6 +12227,206 @@ } ] }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels", + "type": "Object", + "tags": [], + "label": "index_labels", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.default_value", + "type": "Uncategorized", + "tags": [], + "label": "default_value", + "description": [], + "signature": [ + "null" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.depends_on", + "type": "Array", + "tags": [], + "label": "depends_on", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.display", + "type": "string", + "tags": [], + "label": "display", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.DisplayType", + "text": "DisplayType" + }, + ".TOGGLE" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.label", + "type": "string", + "tags": [], + "label": "label", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.options", + "type": "Array", + "tags": [], + "label": "options", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.order", + "type": "number", + "tags": [], + "label": "order", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.required", + "type": "boolean", + "tags": [], + "label": "required", + "description": [], + "signature": [ + "true" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.sensitive", + "type": "boolean", + "tags": [], + "label": "sensitive", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.tooltip", + "type": "string", + "tags": [], + "label": "tooltip", + "description": [], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.type", + "type": "string", + "tags": [], + "label": "type", + "description": [], + "signature": [ + { + "pluginId": "@kbn/search-connectors", + "scope": "common", + "docId": "kibKbnSearchConnectorsPluginApi", + "section": "def-common.FieldType", + "text": "FieldType" + }, + ".BOOLEAN" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.ui_restrictions", + "type": "Array", + "tags": [], + "label": "ui_restrictions", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.validations", + "type": "Array", + "tags": [], + "label": "validations", + "description": [], + "signature": [ + "never[]" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/search-connectors", + "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.index_labels.value", + "type": "boolean", + "tags": [], + "label": "value", + "description": [], + "signature": [ + "false" + ], + "path": "packages/kbn-search-connectors/types/native_connectors.ts", + "deprecated": false, + "trackAdoption": false + } + ] + }, { "parentPluginId": "@kbn/search-connectors", "id": "def-common.NATIVE_CONNECTOR_DEFINITIONS.confluence.configuration.ssl_enabled", diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index 8df143df8877d..9e5db9a384896 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/te | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3647 | 0 | 3647 | 0 | +| 3661 | 0 | 3661 | 0 | ## Common diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 580ed81024f7e..bfef1bd8b3aea 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-15 +date: 2024-05-16 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 14120986b9bba..984eabeb4f418 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-15 +date: 2024-05-16 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 b9b556d4d9be2..490d1081a6e8a 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-15 +date: 2024-05-16 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 b845b832dbe7e..387775730d6cf 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-15 +date: 2024-05-16 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 1ad9d2e99437a..1211f3deb9f7f 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-15 +date: 2024-05-16 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 aee7fe0562e6a..1fae3b2181779 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-15 +date: 2024-05-16 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 7a2a8e5429213..f7e6285fa9233 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-15 +date: 2024-05-16 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 c606a9e70b12d..c3098606794d2 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-15 +date: 2024-05-16 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 4047430eb1120..d119d9d2c72d5 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-15 +date: 2024-05-16 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 a52ea387c6597..21a0574be4cf1 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-15 +date: 2024-05-16 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 221760b8e22e0..63fdbc46a818b 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-15 +date: 2024-05-16 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 1f7f1d90d7d2c..10fedf5ce7e76 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-15 +date: 2024-05-16 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 81585f508f51f..4702520018bdd 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-15 +date: 2024-05-16 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 3f636f9cd44c0..ebc9a026ea74f 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-15 +date: 2024-05-16 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 4261ee66b6501..0f486cabed185 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-15 +date: 2024-05-16 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 b0e3742287282..4506b13a9fa35 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-15 +date: 2024-05-16 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 c2db87d511075..dd3be276a74ce 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-15 +date: 2024-05-16 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 f400bc1a8bd51..83a4fa2286df8 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-15 +date: 2024-05-16 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 6304a48d4a933..f21facb7dacf1 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-15 +date: 2024-05-16 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 08a5645342166..baae394990f71 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-15 +date: 2024-05-16 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 3e2372f7f0a07..4142401c57e43 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-15 +date: 2024-05-16 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 51c9ef84f6903..9440ca4903a74 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-15 +date: 2024-05-16 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 dd69a058061ff..56497662d301e 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-15 +date: 2024-05-16 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 cc6439e021544..5f7eff5937ee5 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-15 +date: 2024-05-16 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 d7fa5921c474e..fd2bbf80c087b 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-15 +date: 2024-05-16 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 6350b2ac8e56c..f1004ec7b35de 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-15 +date: 2024-05-16 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 bd8898f04cecf..bdfa6b9b967ab 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-15 +date: 2024-05-16 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 1951fd15cd4c7..62ac97e20720e 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-15 +date: 2024-05-16 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 7b3a6ceaf075b..a019393fea119 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-15 +date: 2024-05-16 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 67f759894eee6..1735a03457eb9 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-15 +date: 2024-05-16 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 85e4e4e63ee3b..262e529fa13aa 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-15 +date: 2024-05-16 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 270bf7489434a..1db39cadbf035 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-15 +date: 2024-05-16 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 aec2aa908e931..22a9f74217185 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-15 +date: 2024-05-16 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 7f850015800d5..e977a2820cdb7 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-15 +date: 2024-05-16 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 5f1bdca67f237..efaaa4e4114f6 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-15 +date: 2024-05-16 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 48c2c29a6b658..9a854220887bf 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-15 +date: 2024-05-16 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 079018493fe7b..107e89971e6f6 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-15 +date: 2024-05-16 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 a49a58b0c52ca..dca21675ec13b 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-15 +date: 2024-05-16 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 b1bba1086fb86..98702aa2c1804 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-15 +date: 2024-05-16 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 3abf1e25dfd7f..3b36ea5d1e9c0 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-15 +date: 2024-05-16 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 bb14142985a0b..a518de989cb57 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-15 +date: 2024-05-16 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 96d34b8375d90..1bc4f54b8fa0e 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-15 +date: 2024-05-16 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 ac16eb5e3fc7a..8361a23eb2903 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-15 +date: 2024-05-16 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 e288ee7012531..35deb9618afa1 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-15 +date: 2024-05-16 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 0ef0ab01a1051..f907c556f1c87 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-15 +date: 2024-05-16 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 0d3a5823c9133..4d2f5f1823e80 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-15 +date: 2024-05-16 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 3c914ce9a1242..f645cd4d00c9e 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-15 +date: 2024-05-16 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 bd46297893bc0..1254ca2154b94 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-15 +date: 2024-05-16 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 b48fafb4325ec..a338ea52665e2 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-15 +date: 2024-05-16 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 de28bc7ba6618..8ef215892bacc 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-15 +date: 2024-05-16 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 9ae5d4f58318c..45c20f1b23428 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-15 +date: 2024-05-16 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 7b6f0ee834700..d0965a9c5c3a0 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-15 +date: 2024-05-16 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 25676c1762bb8..e7521ef97563c 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-15 +date: 2024-05-16 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 9a90cb0757cf2..2d5cea3cf4b74 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-15 +date: 2024-05-16 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 dd3a2913a2686..ebce9336e18f5 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-15 +date: 2024-05-16 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 7035207a0337f..540063b47b078 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-15 +date: 2024-05-16 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 b542fa9c1edac..0094b649ab73c 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-15 +date: 2024-05-16 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 3e7a6f03f27dd..549075b984ec6 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-15 +date: 2024-05-16 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 ce992f231810e..b2259a25a7042 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-15 +date: 2024-05-16 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 148eb6698fc07..233e5b4be552c 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-15 +date: 2024-05-16 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 f4e5c3ae21ecf..b9b28030ef322 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-15 +date: 2024-05-16 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 a650de1d1bc22..f7c4adf7e8081 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-15 +date: 2024-05-16 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 4bd7c51144440..26e2bd19edceb 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-15 +date: 2024-05-16 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 a67eb6b214447..1c336dd3a7fe5 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-15 +date: 2024-05-16 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 68eb1478ea57e..08ef89efcbd47 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-15 +date: 2024-05-16 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 e31676f476899..09c1fc506e3c6 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-15 +date: 2024-05-16 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 df7f857b8ec4f..8f07624c61f94 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-15 +date: 2024-05-16 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 55d40e2b60187..ef5ce2e346ee5 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-15 +date: 2024-05-16 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 f7fe8232801b0..e11424c8b9a73 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-15 +date: 2024-05-16 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 c0183df15b314..d6bcbca90ae50 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-15 +date: 2024-05-16 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 18cac94561f76..b01e77817da3c 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-15 +date: 2024-05-16 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 2d4c6d84742d4..42477fc361f44 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-15 +date: 2024-05-16 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 91020fa6c643d..600f2c8ef0234 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-15 +date: 2024-05-16 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 c59ea5eed3e3b..579d9be1c6ffe 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-15 +date: 2024-05-16 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 c0279c18ce956..54a7bd5123d50 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-15 +date: 2024-05-16 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 25083ed3b1fe8..c1b20a9cc7c2a 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-15 +date: 2024-05-16 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 b1fbb6b34c320..6eb0d20daa312 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-15 +date: 2024-05-16 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 1655a6298451b..3fc67c924f5ab 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-15 +date: 2024-05-16 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.devdocs.json b/api_docs/kbn_slo_schema.devdocs.json index 185d897db1c04..2322c73758327 100644 --- a/api_docs/kbn_slo_schema.devdocs.json +++ b/api_docs/kbn_slo_schema.devdocs.json @@ -760,7 +760,7 @@ "label": "FetchHistoricalSummaryResponse", "description": [], "signature": [ - "{ sloId: string; instanceId: string; data: ({ date: string; } & { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; })[]; }[]" + "{ sloId: string; instanceId: string; data: ({ date: string; } & { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; } & { summaryUpdatedAt?: string | null | undefined; })[]; }[]" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts", "deprecated": false, @@ -880,7 +880,7 @@ "label": "FindSLOParams", "description": [], "signature": [ - "{ filters?: string | undefined; kqlQuery?: string | undefined; page?: string | undefined; perPage?: string | undefined; sortBy?: \"status\" | \"error_budget_consumed\" | \"error_budget_remaining\" | \"sli_value\" | undefined; sortDirection?: \"asc\" | \"desc\" | undefined; }" + "{ filters?: string | undefined; kqlQuery?: string | undefined; page?: string | undefined; perPage?: string | undefined; sortBy?: \"status\" | \"error_budget_consumed\" | \"error_budget_remaining\" | \"sli_value\" | undefined; sortDirection?: \"asc\" | \"desc\" | undefined; hideStale?: boolean | undefined; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts", "deprecated": false, @@ -895,7 +895,7 @@ "label": "FindSLOResponse", "description": [], "signature": [ - "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; })[]; }" + "{ page: number; perPage: number; total: number; results: ({ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; })[]; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts", "deprecated": false, @@ -993,7 +993,7 @@ "label": "GetSLOResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/get.ts", "deprecated": false, @@ -1008,7 +1008,7 @@ "label": "GetSLOSettingsResponse", "description": [], "signature": [ - "{ useAllRemoteClusters: boolean; selectedRemoteClusters: string[]; }" + "{ useAllRemoteClusters: boolean; selectedRemoteClusters: string[]; staleThresholdInHours: number; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts", "deprecated": false, @@ -1083,7 +1083,7 @@ "label": "HistoricalSummaryResponse", "description": [], "signature": [ - "{ date: string; } & { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }" + "{ date: string; } & { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; } & { summaryUpdatedAt?: string | null | undefined; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts", "deprecated": false, @@ -1203,7 +1203,7 @@ "label": "PutSLOSettingsParams", "description": [], "signature": [ - "{ useAllRemoteClusters: boolean; selectedRemoteClusters: string[]; }" + "{ useAllRemoteClusters: boolean; selectedRemoteClusters: string[]; staleThresholdInHours: number; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts", "deprecated": false, @@ -1218,7 +1218,7 @@ "label": "PutSLOSettingsResponse", "description": [], "signature": [ - "{ useAllRemoteClusters: boolean; selectedRemoteClusters: string[]; }" + "{ useAllRemoteClusters: boolean; selectedRemoteClusters: string[]; staleThresholdInHours: number; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts", "deprecated": false, @@ -1293,7 +1293,7 @@ "label": "SLOWithSummaryResponse", "description": [], "signature": [ - "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" + "{ id: string; name: string; description: string; indicator: { type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }; timeWindow: { duration: string; type: \"rolling\"; } | { duration: string; type: \"calendarAligned\"; }; budgetingMethod: \"occurrences\" | \"timeslices\"; objective: { target: number; } & { timesliceTarget?: number | undefined; timesliceWindow?: string | undefined; }; settings: { syncDelay: string; frequency: string; }; revision: number; enabled: boolean; tags: string[]; createdAt: string; updatedAt: string; groupBy: string | string[]; version: number; } & { summary: { status: \"HEALTHY\" | \"NO_DATA\" | \"DEGRADING\" | \"VIOLATED\"; sliValue: number; errorBudget: { initial: number; consumed: number; remaining: number; isEstimated: boolean; }; } & { summaryUpdatedAt?: string | null | undefined; }; groupings: { [x: string]: string | number; }; } & { instanceId?: string | undefined; meta?: { synthetics?: { monitorId: string; locationId: string; configId: string; } | undefined; } | undefined; remote?: { remoteName: string; kibanaUrl: string; } | undefined; }" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/slo.ts", "deprecated": false, @@ -3513,6 +3513,8 @@ "<{ date: ", "Type", "; }>, ", + "IntersectionC", + "<[", "TypeC", "<{ status: ", "UnionC", @@ -3536,7 +3538,15 @@ "NumberC", "; isEstimated: ", "BooleanC", - "; }>; }>]>>; }>>" + "; }>; }>, ", + "PartialC", + "<{ summaryUpdatedAt: ", + "UnionC", + "<[", + "StringC", + ", ", + "NullC", + "]>; }>]>]>>; }>>" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts", "deprecated": false, @@ -5266,7 +5276,9 @@ "LiteralC", "<\"asc\">, ", "LiteralC", - "<\"desc\">]>; }>; }>" + "<\"desc\">]>; hideStale: ", + "Type", + "; }>; }>" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/find.ts", "deprecated": false, @@ -6681,6 +6693,8 @@ "; }>, ", "TypeC", "<{ summary: ", + "IntersectionC", + "<[", "TypeC", "<{ status: ", "UnionC", @@ -6704,7 +6718,15 @@ "NumberC", "; isEstimated: ", "BooleanC", - "; }>; }>; groupings: ", + "; }>; }>, ", + "PartialC", + "<{ summaryUpdatedAt: ", + "UnionC", + "<[", + "StringC", + ", ", + "NullC", + "]>; }>]>; groupings: ", "RecordC", "<", "StringC", @@ -9671,6 +9693,8 @@ "; }>, ", "TypeC", "<{ summary: ", + "IntersectionC", + "<[", "TypeC", "<{ status: ", "UnionC", @@ -9694,7 +9718,15 @@ "NumberC", "; isEstimated: ", "BooleanC", - "; }>; }>; groupings: ", + "; }>; }>, ", + "PartialC", + "<{ summaryUpdatedAt: ", + "UnionC", + "<[", + "StringC", + ", ", + "NullC", + "]>; }>]>; groupings: ", "RecordC", "<", "StringC", @@ -10213,6 +10245,8 @@ "<{ date: ", "Type", "; }>, ", + "IntersectionC", + "<[", "TypeC", "<{ status: ", "UnionC", @@ -10236,7 +10270,15 @@ "NumberC", "; isEstimated: ", "BooleanC", - "; }>; }>]>" + "; }>; }>, ", + "PartialC", + "<{ summaryUpdatedAt: ", + "UnionC", + "<[", + "StringC", + ", ", + "NullC", + "]>; }>]>]>" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/fetch_historical_summary.ts", "deprecated": false, @@ -12445,7 +12487,9 @@ "TypeC", "<{ body: ", "TypeC", - "<{}>; }>" + "<{ staleThresholdInHours: ", + "NumberC", + "; }>; }>" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts", "deprecated": false, @@ -12469,7 +12513,9 @@ "ArrayC", "<", "StringC", - ">; }>; }>" + ">; staleThresholdInHours: ", + "NumberC", + "; }>; }>" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts", "deprecated": false, @@ -12491,7 +12537,9 @@ "ArrayC", "<", "StringC", - ">; }>" + ">; staleThresholdInHours: ", + "NumberC", + "; }>" ], "path": "x-pack/packages/kbn-slo-schema/src/rest_specs/routes/put_settings.ts", "deprecated": false, @@ -15558,7 +15606,9 @@ "description": [], "signature": [ "TypeC", - "<{}>" + "<{ staleThresholdInHours: ", + "NumberC", + "; }>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/settings.ts", "deprecated": false, @@ -15580,7 +15630,9 @@ "ArrayC", "<", "StringC", - ">; }>" + ">; staleThresholdInHours: ", + "NumberC", + "; }>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/settings.ts", "deprecated": false, @@ -16985,6 +17037,8 @@ "; }>, ", "TypeC", "<{ summary: ", + "IntersectionC", + "<[", "TypeC", "<{ status: ", "UnionC", @@ -17008,7 +17062,15 @@ "NumberC", "; isEstimated: ", "BooleanC", - "; }>; }>; groupings: ", + "; }>; }>, ", + "PartialC", + "<{ summaryUpdatedAt: ", + "UnionC", + "<[", + "StringC", + ", ", + "NullC", + "]>; }>]>; groupings: ", "RecordC", "<", "StringC", @@ -17105,6 +17167,8 @@ "label": "summarySchema", "description": [], "signature": [ + "IntersectionC", + "<[", "TypeC", "<{ status: ", "UnionC", @@ -17128,7 +17192,15 @@ "NumberC", "; isEstimated: ", "BooleanC", - "; }>; }>" + "; }>; }>, ", + "PartialC", + "<{ summaryUpdatedAt: ", + "UnionC", + "<[", + "StringC", + ", ", + "NullC", + "]>; }>]>" ], "path": "x-pack/packages/kbn-slo-schema/src/schema/common.ts", "deprecated": false, diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index 24304094ed556..57f02527ae298 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_es.mdx b/api_docs/kbn_solution_nav_es.mdx index 18333da77f242..166bc52255a21 100644 --- a/api_docs/kbn_solution_nav_es.mdx +++ b/api_docs/kbn_solution_nav_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-solution-nav-es title: "@kbn/solution-nav-es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/solution-nav-es plugin -date: 2024-05-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/solution-nav-es'] --- import kbnSolutionNavEsObj from './kbn_solution_nav_es.devdocs.json'; diff --git a/api_docs/kbn_solution_nav_oblt.mdx b/api_docs/kbn_solution_nav_oblt.mdx index 7c322496a9704..8146c538764e6 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-15 +date: 2024-05-16 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 0f3d3d43bacf4..027ec53e5f5cd 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-15 +date: 2024-05-16 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 c9fc6aa38a951..fba0c0bc86551 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-15 +date: 2024-05-16 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 fe0b0117b8490..91e2dc1fa14d7 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-15 +date: 2024-05-16 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 0b95798f659c6..d2c5020047e94 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-15 +date: 2024-05-16 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 8c20ca17dfac8..36e8a7f76b79f 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-15 +date: 2024-05-16 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 a0c6b28a44484..42facc713b24c 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-15 +date: 2024-05-16 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 fc93d907997cb..84737a2c9f9b4 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-15 +date: 2024-05-16 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 2575bc7101ef5..b184c22be1544 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-15 +date: 2024-05-16 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 92d8ae76d9fac..2236e323df45f 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-15 +date: 2024-05-16 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 b21b5e6e56bc9..a95d2c09c4db2 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-15 +date: 2024-05-16 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 21e0edb4d8455..bfddc274650d6 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-15 +date: 2024-05-16 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 a1305f6720d21..314d215e990ce 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-15 +date: 2024-05-16 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 7c7ca0e858199..cfec45e65cc76 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-15 +date: 2024-05-16 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 634549140ae5b..1edc8f9da5712 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-15 +date: 2024-05-16 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 5fb348a422a6b..c4d3e26e9546d 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-15 +date: 2024-05-16 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 f57f4d3c5d689..176d30b579f26 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-15 +date: 2024-05-16 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 1f61e7dd58924..dc5a0a8484a76 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-15 +date: 2024-05-16 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 dc121ebd55936..ae43f0539af1a 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-15 +date: 2024-05-16 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 9356dcc403bdb..bb0a0f8c06991 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-15 +date: 2024-05-16 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 a942ac7f3efdf..ef827c0a57ccd 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-15 +date: 2024-05-16 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 fcc776e3b743d..49959eb9f4656 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-15 +date: 2024-05-16 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 1169197284b87..3791de89a21cf 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-15 +date: 2024-05-16 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 a351d0e910c47..931cda1107e6b 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-15 +date: 2024-05-16 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 ade519ba2be02..9352a38315dd7 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-15 +date: 2024-05-16 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 81fc768e7c919..32e0ef1be4cb4 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-15 +date: 2024-05-16 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 b962100c4a0ae..1ee17f2da1447 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-15 +date: 2024-05-16 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 77eb0c8a5608a..724cd472c9551 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-15 +date: 2024-05-16 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 3f17e41af0ed7..d41184c744562 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-15 +date: 2024-05-16 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 3d9f058837e89..31f07dfbc118d 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-15 +date: 2024-05-16 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 8adfe46353510..b44bb62993580 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-15 +date: 2024-05-16 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 5b2388d0e1fc9..9d4d5b45e0d5e 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-15 +date: 2024-05-16 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 1fa8a79d432f6..321f42394aa4e 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-15 +date: 2024-05-16 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 2ea88fdc040ef..cf1968ea2b1c5 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-15 +date: 2024-05-16 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 50e32143e6502..93dc63ea17678 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-15 +date: 2024-05-16 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 8f6eef983217a..357169b6bc610 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.devdocs.json b/api_docs/kibana_react.devdocs.json index fb67fa4907473..8acf8ede8f3e4 100644 --- a/api_docs/kibana_react.devdocs.json +++ b/api_docs/kibana_react.devdocs.json @@ -510,56 +510,7 @@ "path": "src/plugins/kibana_react/public/theme.tsx", "deprecated": true, "trackAdoption": false, - "references": [ - { - "plugin": "infra", - "path": "x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx" - }, - { - "plugin": "infra", - "path": "x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx" - }, - { - "plugin": "infra", - "path": "x-pack/plugins/observability_solution/infra/public/apps/common_providers.tsx" - }, - { - "plugin": "metricsDataAccess", - "path": "x-pack/plugins/observability_solution/metrics_data_access/public/apps/common_providers.tsx" - }, - { - "plugin": "metricsDataAccess", - "path": "x-pack/plugins/observability_solution/metrics_data_access/public/apps/common_providers.tsx" - }, - { - "plugin": "metricsDataAccess", - "path": "x-pack/plugins/observability_solution/metrics_data_access/public/apps/common_providers.tsx" - }, - { - "plugin": "apm", - "path": "x-pack/plugins/observability_solution/apm/public/application/index.tsx" - }, - { - "plugin": "apm", - "path": "x-pack/plugins/observability_solution/apm/public/application/index.tsx" - }, - { - "plugin": "apm", - "path": "x-pack/plugins/observability_solution/apm/public/application/index.tsx" - }, - { - "plugin": "observabilityOnboarding", - "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/app.tsx" - }, - { - "plugin": "observabilityOnboarding", - "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/app.tsx" - }, - { - "plugin": "observabilityOnboarding", - "path": "x-pack/plugins/observability_solution/observability_onboarding/public/application/app.tsx" - } - ], + "references": [], "children": [ { "parentPluginId": "kibanaReact", diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 27b83cf975b8d..7a5aef74a8c4a 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-15 +date: 2024-05-16 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 a32f56cab9812..011e618aa23aa 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-15 +date: 2024-05-16 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 b3215e370a47a..919f4a3b6cb8d 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-15 +date: 2024-05-16 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 9cac255957dd6..75b891aa6e677 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-15 +date: 2024-05-16 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 be7babe2eb5e1..0e482e6ea7225 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-15 +date: 2024-05-16 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 58fb37d6647d1..26e85a2bdd468 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-15 +date: 2024-05-16 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 9369a4a627fea..92d78bfb15e3a 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-15 +date: 2024-05-16 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 fb7eb4c0fcec4..96d81e43d0780 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-15 +date: 2024-05-16 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 af7b54288f7f2..abd0d0369f6ef 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-15 +date: 2024-05-16 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 5d63015398648..00a94ada300b4 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-15 +date: 2024-05-16 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 d52c2df8eb032..7a709b5e0fc4e 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsExplorer'] --- import logsExplorerObj from './logs_explorer.devdocs.json'; diff --git a/api_docs/logs_shared.devdocs.json b/api_docs/logs_shared.devdocs.json index a71d201b3207c..a2cd970283979 100644 --- a/api_docs/logs_shared.devdocs.json +++ b/api_docs/logs_shared.devdocs.json @@ -2945,7 +2945,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; isNewVersion: () => boolean; }" + ") => void; }" ], "path": "x-pack/plugins/observability_solution/logs_shared/public/types.ts", "deprecated": false, diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index ec93621d9c90f..6ad6f3f106dc5 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-15 +date: 2024-05-16 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 95fee789cbaf8..b8b6c19554faa 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-15 +date: 2024-05-16 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 a99c9a480228b..3f913dd6a1d76 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-15 +date: 2024-05-16 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 4e43d4f6bc541..e84d3422051a2 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-15 +date: 2024-05-16 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 46e3397d2fc87..ccd39f2162bbf 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-15 +date: 2024-05-16 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 9636c66101e51..4f8c6b6fe013a 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-15 +date: 2024-05-16 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 b6a043650b94a..73a8c8b5c7d31 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-15 +date: 2024-05-16 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 b5649e5c80360..40cec41f85dda 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-15 +date: 2024-05-16 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 2f6bf5886c8af..c80f1935b2f6e 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-15 +date: 2024-05-16 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 e348e039a5969..b81fed6e69a37 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-15 +date: 2024-05-16 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 459e472eb07e1..397df74040477 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-15 +date: 2024-05-16 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 07b232a53055f..5a3533019838b 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-15 +date: 2024-05-16 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 b502b659951db..0dd53fb82f210 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index d11d8994c958d..3cffa85091ec5 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -2711,7 +2711,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; isNewVersion: () => boolean; }" + ") => void; }" ], "path": "x-pack/plugins/observability_solution/observability/public/plugin.ts", "deprecated": false, diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index ccd3b7103187e..4262ed9eec0b0 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-15 +date: 2024-05-16 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 701fd6fc027d9..00c154ef7b9bd 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-15 +date: 2024-05-16 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 d946ba6bfae25..94079a6a623ab 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-15 +date: 2024-05-16 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 d116ce45c5aad..dff0be9912090 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-15 +date: 2024-05-16 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 824d8068e6032..de588320fe4d1 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-15 +date: 2024-05-16 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 da18389d6a2b4..b6c68453a523a 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-15 +date: 2024-05-16 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 6fc5a87a0d1c9..a9e2a3bac29c6 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-15 +date: 2024-05-16 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 d5f8e79ec4b35..8a9550166fc8d 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-15 +date: 2024-05-16 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 65e5b7acb7840..2bb9abcc168ee 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-15 +date: 2024-05-16 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 c3e77273fedb6..3e64d151f37b2 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 48165 | 241 | 36749 | 1856 | +| 48169 | 241 | 36749 | 1858 | ## Plugin Directory @@ -65,11 +65,11 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 31 | 3 | 25 | 4 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin introduces the concept of dataset quality, where users can easily get an overview on the datasets they have. | 10 | 0 | 10 | 5 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 15 | 0 | 9 | 2 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 148 | 0 | 101 | 27 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin contains the Discover application and the saved search embeddable. | 148 | 0 | 101 | 28 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 35 | 0 | 33 | 2 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A stateful layer to register shared features and provide an access point to discover without a direct dependency | 16 | 0 | 15 | 2 | | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | APIs used to assess the quality of data in Elasticsearch indexes | 2 | 0 | 0 | 0 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 45 | 0 | 31 | 0 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | Server APIs for the Elastic AI Assistant | 46 | 0 | 32 | 0 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds embeddables service to Kibana | 564 | 1 | 454 | 8 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Extends embeddable plugin with more functionality | 19 | 0 | 19 | 2 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides encryption and decryption utilities for saved objects containing sensitive information. | 53 | 0 | 46 | 1 | @@ -180,8 +180,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | Serverless customizations for observability. | 6 | 0 | 6 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | Serverless customizations for search. | 6 | 0 | 6 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 134 | 0 | 134 | 8 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds URL Service and sharing capabilities to Kibana | 136 | 0 | 77 | 11 | -| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 63 | 0 | 63 | 1 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Adds URL Service and sharing capabilities to Kibana | 120 | 0 | 59 | 12 | +| | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 64 | 0 | 64 | 1 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 22 | 1 | 22 | 1 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | This plugin provides the Spaces feature, which allows saved objects to be organized into meaningful categories. | 257 | 0 | 66 | 0 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 25 | 0 | 25 | 3 | @@ -393,9 +393,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 4 | 0 | 4 | 1 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 13 | 1 | 12 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 112 | 1 | 0 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 354 | 1 | 5 | 2 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 356 | 1 | 5 | 2 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 11 | 0 | 11 | 0 | -| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 226 | 0 | 183 | 11 | +| | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 225 | 0 | 182 | 11 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 5 | 0 | 5 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 2 | 0 | 1 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 6 | 0 | 6 | 0 | @@ -612,7 +612,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 17 | 0 | 16 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 13 | 0 | 11 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 110 | 0 | 104 | 2 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 113 | 0 | 107 | 2 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 88 | 0 | 87 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | A component for creating resizable layouts containing a fixed width panel and a flexible panel, with support for horizontal and vertical layouts. | 18 | 0 | 5 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 13 | 2 | 8 | 0 | @@ -622,7 +622,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-detections-response](https://github.com/orgs/elastic/teams/security-detections-response) | - | 125 | 0 | 122 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 74 | 0 | 74 | 0 | -| | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 3647 | 0 | 3647 | 0 | +| | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 3661 | 0 | 3661 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 18 | 1 | 17 | 1 | | | [@elastic/enterprise-search-frontend](https://github.com/orgs/elastic/teams/enterprise-search-frontend) | - | 25 | 0 | 25 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 20 | 0 | 18 | 1 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 9feb870498f05..2145e99247362 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-15 +date: 2024-05-16 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 491597872c716..da95f22c5d43b 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-15 +date: 2024-05-16 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 8d8e6078d44cd..59bcde1e25540 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-15 +date: 2024-05-16 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 0732ce7fe44a4..7e50e73193555 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-15 +date: 2024-05-16 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 a499e208233b6..3c2a53eb016ad 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-15 +date: 2024-05-16 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 1c8a79d68dc56..2a05fe65cb673 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-15 +date: 2024-05-16 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 bd6aa64620bdd..23bf7e53d0667 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-15 +date: 2024-05-16 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 415a7699596da..e36801de65fe5 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-15 +date: 2024-05-16 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 ad2ce6c238364..aacbce38894b8 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-15 +date: 2024-05-16 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 cd3698818f628..2bc1a39cc90c6 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-15 +date: 2024-05-16 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 4cb247414563e..46ae5fbff6659 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-15 +date: 2024-05-16 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 dd8e644138c1f..e20f831efa6aa 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-15 +date: 2024-05-16 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 46a0429b34c55..f28487633f2da 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-15 +date: 2024-05-16 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 86b6eb2ffa86b..3bc20357ed071 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-15 +date: 2024-05-16 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 b35c70d86435c..b8692decda8e9 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-15 +date: 2024-05-16 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 f0b47e5d1321d..72f430068b701 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-15 +date: 2024-05-16 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 6dddf226b9f2e..712304b5e4224 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-15 +date: 2024-05-16 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 2c262ae02fa7c..1ac19f6cbeeb9 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-15 +date: 2024-05-16 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 c80434cf390e6..e10f9cbb278ac 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-15 +date: 2024-05-16 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 e8f0c6d31ff17..ad30d44332bc3 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-15 +date: 2024-05-16 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 55a26c85bc579..9cc1a66ad2cad 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-15 +date: 2024-05-16 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 5d424ada82507..85c8a7e004df7 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-15 +date: 2024-05-16 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 97788ff92931c..fea3359dc12e8 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-15 +date: 2024-05-16 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 6b69c85b90e38..d6ddfb15b8aa3 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-15 +date: 2024-05-16 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 6f8d9458ad57d..30cbb8e5ac8a7 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-15 +date: 2024-05-16 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 4489200a20b5a..cf0a98ae88b87 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-15 +date: 2024-05-16 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 1f1ada8771f2e..1cb1741ffda15 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-15 +date: 2024-05-16 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 613806513e60b..c1f4d9050b1ef 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.devdocs.json b/api_docs/share.devdocs.json index 32ec76690798d..90e97c034bb12 100644 --- a/api_docs/share.devdocs.json +++ b/api_docs/share.devdocs.json @@ -837,6 +837,22 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "share", + "id": "def-public.ShareContext.objectTypeMeta", + "type": "Object", + "tags": [], + "label": "objectTypeMeta", + "description": [ + "\nAllows for passing contextual information that each consumer can provide to customize the share menu" + ], + "signature": [ + "{ title: string; }" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false + }, { "parentPluginId": "share", "id": "def-public.ShareContext.objectId", @@ -860,6 +876,9 @@ "description": [ "\nCurrent url for sharing. This can be set in cases where `window.location.href`\ndoes not contain a shareable URL (e.g. if using session storage to store the current\napp state is enabled). In these cases the property should contain the URL in a\nformat which makes it possible to use it without having access to any other state\nlike the current session.\n\nIf not set it will default to `window.location.href`" ], + "signature": [ + "string | undefined" + ], "path": "src/plugins/share/public/types.ts", "deprecated": false, "trackAdoption": false @@ -868,15 +887,31 @@ "parentPluginId": "share", "id": "def-public.ShareContext.shareableUrlForSavedObject", "type": "string", - "tags": [], + "tags": [ + "deprecated" + ], "label": "shareableUrlForSavedObject", "description": [], "signature": [ "string | undefined" ], "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false + "deprecated": true, + "trackAdoption": false, + "references": [ + { + "plugin": "discover", + "path": "src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx" + }, + { + "plugin": "@kbn/reporting-public", + "path": "packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx" + }, + { + "plugin": "@kbn/reporting-public", + "path": "packages/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx" + } + ] }, { "parentPluginId": "share", @@ -900,6 +935,26 @@ "deprecated": false, "trackAdoption": false }, + { + "parentPluginId": "share", + "id": "def-public.ShareContext.delegatedShareUrlHandler", + "type": "Function", + "tags": [ + "description" + ], + "label": "delegatedShareUrlHandler", + "description": [ + "\n" + ], + "signature": [ + "(() => string) | undefined" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [], + "returnComment": [] + }, { "parentPluginId": "share", "id": "def-public.ShareContext.sharingData", @@ -1075,273 +1130,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem", - "type": "Interface", - "tags": [], - "label": "ShareMenuItem", - "description": [], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.shareMenuItem", - "type": "Object", - "tags": [], - "label": "shareMenuItem", - "description": [], - "signature": [ - { - "pluginId": "share", - "scope": "public", - "docId": "kibSharePluginApi", - "section": "def-public.ShareContextMenuPanelItem", - "text": "ShareContextMenuPanelItem" - }, - " | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.panel", - "type": "Object", - "tags": [], - "label": "panel", - "description": [], - "signature": [ - "EuiContextMenuPanelDescriptor", - " | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.label", - "type": "CompoundType", - "tags": [], - "label": "label", - "description": [], - "signature": [ - "\"PDF\" | \"CSV\" | \"PNG\" | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.reportType", - "type": "string", - "tags": [], - "label": "reportType", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.requiresSavedState", - "type": "CompoundType", - "tags": [], - "label": "requiresSavedState", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.helpText", - "type": "Object", - "tags": [], - "label": "helpText", - "description": [], - "signature": [ - "React.ReactElement> | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.copyURLButton", - "type": "Object", - "tags": [], - "label": "copyURLButton", - "description": [], - "signature": [ - "{ id: string; dataTestSubj: string; label: string; } | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.generateReportButton", - "type": "Object", - "tags": [], - "label": "generateReportButton", - "description": [], - "signature": [ - "React.ReactElement> | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.generateReport", - "type": "Object", - "tags": [], - "label": "generateReport", - "description": [], - "signature": [ - "Function | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.generateReportForPrinting", - "type": "Object", - "tags": [], - "label": "generateReportForPrinting", - "description": [], - "signature": [ - "Function | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.theme", - "type": "Object", - "tags": [], - "label": "theme", - "description": [], - "signature": [ - { - "pluginId": "@kbn/core-theme-browser", - "scope": "common", - "docId": "kibKbnCoreThemeBrowserPluginApi", - "section": "def-common.ThemeServiceSetup", - "text": "ThemeServiceSetup" - }, - " | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.downloadCSVLens", - "type": "Object", - "tags": [], - "label": "downloadCSVLens", - "description": [], - "signature": [ - "Function | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.renderLayoutOptionSwitch", - "type": "CompoundType", - "tags": [], - "label": "renderLayoutOptionSwitch", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.layoutOption", - "type": "string", - "tags": [], - "label": "layoutOption", - "description": [], - "signature": [ - "\"print\" | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.absoluteUrl", - "type": "string", - "tags": [], - "label": "absoluteUrl", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.generateCopyUrl", - "type": "Object", - "tags": [], - "label": "generateCopyUrl", - "description": [], - "signature": [ - "URL | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - }, - { - "parentPluginId": "share", - "id": "def-public.ShareMenuItem.renderCopyURLButton", - "type": "CompoundType", - "tags": [], - "label": "renderCopyURLButton", - "description": [], - "signature": [ - "boolean | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "share", "id": "def-public.ShareMenuProvider", @@ -1522,20 +1310,6 @@ "trackAdoption": false, "children": [], "returnComment": [] - }, - { - "parentPluginId": "share", - "id": "def-public.ShowShareMenuOptions.objectTypeTitle", - "type": "string", - "tags": [], - "label": "objectTypeTitle", - "description": [], - "signature": [ - "string | undefined" - ], - "path": "src/plugins/share/public/types.ts", - "deprecated": false, - "trackAdoption": false } ], "initialIsOpen": false @@ -1620,6 +1394,22 @@ "deprecated": false, "trackAdoption": false, "initialIsOpen": false + }, + { + "parentPluginId": "share", + "id": "def-public.ShareMenuItem", + "type": "Type", + "tags": [], + "label": "ShareMenuItem", + "description": [], + "signature": [ + "ShareMenuItemLegacy | ", + "ShareMenuItemV2" + ], + "path": "src/plugins/share/public/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false } ], "objects": [], @@ -1665,7 +1455,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; isNewVersion: () => boolean; }" + ") => void; }" ], "path": "src/plugins/share/public/plugin.ts", "deprecated": false, diff --git a/api_docs/share.mdx b/api_docs/share.mdx index c0743559b3544..8c720971ed0a1 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 136 | 0 | 77 | 11 | +| 120 | 0 | 59 | 12 | ## Client diff --git a/api_docs/slo.devdocs.json b/api_docs/slo.devdocs.json index 8cd578a4bcd01..7641ca4b43fd5 100644 --- a/api_docs/slo.devdocs.json +++ b/api_docs/slo.devdocs.json @@ -231,7 +231,7 @@ "section": "def-common.AnonymousAccessServiceContract", "text": "AnonymousAccessServiceContract" }, - ") => void; isNewVersion: () => boolean; }" + ") => void; }" ], "path": "x-pack/plugins/observability_solution/slo/public/types.ts", "deprecated": false, @@ -1256,7 +1256,7 @@ }, "<", "CreateSLOForm", - "<{ type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }>> | undefined; }) => JSX.Element; }" + "<{ type: \"sli.apm.transactionDuration\"; params: { environment: string; service: string; transactionType: string; transactionName: string; threshold: number; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.apm.transactionErrorRate\"; params: { environment: string; service: string; transactionType: string; transactionName: string; index: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.synthetics.availability\"; params: { monitorIds: { value: string; label: string; }[]; index: string; } & { tags?: { value: string; label: string; }[] | undefined; projects?: { value: string; label: string; }[] | undefined; filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.kql.custom\"; params: { index: string; good: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; total: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.custom\"; params: { index: string; good: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; total: { metrics: (({ name: string; aggregation: \"sum\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.metric.timeslice\"; params: { index: string; metric: { metrics: (({ name: string; aggregation: \"min\" | \"max\" | \"sum\" | \"avg\" | \"last_value\" | \"cardinality\" | \"std_deviation\"; field: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"doc_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ name: string; aggregation: \"percentile\"; field: string; percentile: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }))[]; equation: string; threshold: number; comparator: \"GT\" | \"GTE\" | \"LT\" | \"LTE\"; }; timestampField: string; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; } | { type: \"sli.histogram.custom\"; params: { index: string; timestampField: string; good: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); total: ({ field: string; aggregation: \"value_count\"; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }) | ({ field: string; aggregation: \"range\"; from: number; to: number; } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }); } & { filter?: string | { kqlQuery: string; filters: { meta: { alias?: string | null | undefined; disabled?: boolean | undefined; negate?: boolean | undefined; controlledBy?: string | undefined; group?: string | undefined; index?: string | undefined; isMultiIndex?: boolean | undefined; type?: string | undefined; key?: string | undefined; params?: any; value?: string | undefined; }; query: { [x: string]: any; }; }[]; } | undefined; }; }>> | undefined; }) => Promise; }" ], "path": "x-pack/plugins/observability_solution/slo/public/types.ts", "deprecated": false, @@ -1515,6 +1515,26 @@ "path": "x-pack/plugins/observability_solution/slo/server/plugin.ts", "deprecated": false, "trackAdoption": false + }, + { + "parentPluginId": "slo", + "id": "def-server.PluginStart.ruleRegistry", + "type": "Object", + "tags": [], + "label": "ruleRegistry", + "description": [], + "signature": [ + { + "pluginId": "ruleRegistry", + "scope": "server", + "docId": "kibRuleRegistryPluginApi", + "section": "def-server.RuleRegistryPluginStartContract", + "text": "RuleRegistryPluginStartContract" + } + ], + "path": "x-pack/plugins/observability_solution/slo/server/plugin.ts", + "deprecated": false, + "trackAdoption": false } ], "initialIsOpen": false diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 352a848a965ea..8b5389648d7be 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 63 | 0 | 63 | 1 | +| 64 | 0 | 64 | 1 | ## Client diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index dcf3bcec60d89..f6aaf051b3b9a 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-15 +date: 2024-05-16 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 360972e183e6f..830a9e5aca980 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-15 +date: 2024-05-16 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 d19c5a9b218c3..812a693b535ed 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-15 +date: 2024-05-16 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 ea9a1c5e0f1b5..02eb6962b84dd 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-15 +date: 2024-05-16 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 b8ded3a085baf..516c11d380aa9 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-15 +date: 2024-05-16 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 4a31e92a718ba..74631a8919b1e 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-15 +date: 2024-05-16 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 2944874135df1..053edf9c9126d 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-15 +date: 2024-05-16 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 38b7c0ccb4993..b90952aa40d1d 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-15 +date: 2024-05-16 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 93a7fd8abf59f..857fc60f97275 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-15 +date: 2024-05-16 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 1a9d688bbb098..8ecaf47a13738 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-15 +date: 2024-05-16 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 445e2b9ee995a..378d0497d9775 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-15 +date: 2024-05-16 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 56e937af31947..e1022f8e64e82 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-15 +date: 2024-05-16 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 24f677a94ccc8..9bda799d01487 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-15 +date: 2024-05-16 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 41ba6410cb155..4ff64d38543aa 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-15 +date: 2024-05-16 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 874bc5a3735a6..709beb47f717d 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-15 +date: 2024-05-16 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 74786bf92202a..3a0eae1a653d8 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-15 +date: 2024-05-16 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 6d5fe8a25874f..73a64d8061abd 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-15 +date: 2024-05-16 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 adbe62deb6047..69324711e559b 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-15 +date: 2024-05-16 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 9860fdbb8d3b4..4f96aa3a99e84 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-15 +date: 2024-05-16 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 f9b757b72eb61..22caefb2c4aa7 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-15 +date: 2024-05-16 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 6ee5e5b3b4ec0..75c3728f3990a 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-15 +date: 2024-05-16 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 97d24e77e4621..89fb7f8808360 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-15 +date: 2024-05-16 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 f1cc69573ee7f..45c0fe42cf6ce 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-15 +date: 2024-05-16 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 db294106e68ad..e53fe6a4b37c8 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-15 +date: 2024-05-16 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 8d653b109772e..17e298249be94 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-15 +date: 2024-05-16 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 0faa797b71698..f3adce8e310ca 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-15 +date: 2024-05-16 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 3f17f92727116..5d6141e96a9cf 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-15 +date: 2024-05-16 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 0ef7fba7261a3..2696af2b3e9b5 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-15 +date: 2024-05-16 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 96dffd8454006..349085d407f44 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-15 +date: 2024-05-16 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 d82a8e35d6ed5..b97fa189cac8b 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-15 +date: 2024-05-16 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 dff8b2858286a..ad4855319ba27 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-15 +date: 2024-05-16 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 079e5e8f46f7d..62ca2ea357824 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-15 +date: 2024-05-16 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 134b75062f899..9be604bdcc0da 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-15 +date: 2024-05-16 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 bc434f2c31a1f..31bdcc7b53bb3 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-15 +date: 2024-05-16 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 22d7dc5b88ec7..a33529abce609 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-15 +date: 2024-05-16 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/docs/api/role-management/get-all.asciidoc b/docs/api/role-management/get-all.asciidoc index 888bf0c8a137c..56c8b2c78859b 100644 --- a/docs/api/role-management/get-all.asciidoc +++ b/docs/api/role-management/get-all.asciidoc @@ -32,6 +32,7 @@ The API returns the following: [ { "name": "my_kibana_role", + "description": "My kibana role description", "metadata" : { "version" : 1 }, @@ -55,6 +56,7 @@ The API returns the following: }, { "name": "my_admin_role", + "description": "My admin role description", "metadata" : { "version" : 1 }, diff --git a/docs/api/role-management/get.asciidoc b/docs/api/role-management/get.asciidoc index b18b2e231774a..95f944a56e150 100644 --- a/docs/api/role-management/get.asciidoc +++ b/docs/api/role-management/get.asciidoc @@ -31,6 +31,7 @@ The API returns the following: -------------------------------------------------- { "name": "my_restricted_kibana_role", + "description": "My restricted kibana role description", "metadata" : { "version" : 1 }, diff --git a/docs/api/role-management/put.asciidoc b/docs/api/role-management/put.asciidoc index ce293f75b63ae..d68f3928a4063 100644 --- a/docs/api/role-management/put.asciidoc +++ b/docs/api/role-management/put.asciidoc @@ -21,6 +21,9 @@ To use the create or update role API, you must have the `manage_security` cluste [[role-management-api-response-body]] ==== Request body +`description`:: + (Optional, string) Description for the role. + `metadata`:: (Optional, object) In the `metadata` object, keys that begin with `_` are reserved for system usage. @@ -74,6 +77,7 @@ Grant access to various features in all spaces: -------------------------------------------------- $ curl -X PUT api/security/role/my_kibana_role { + "description": "my_kibana_role_description", "metadata": { "version": 1 }, @@ -112,6 +116,7 @@ Grant dashboard-only access to only the Marketing space: -------------------------------------------------- $ curl -X PUT api/security/role/my_kibana_role { + "description": "Grants dashboard-only access to only the Marketing space.", "metadata": { "version": 1 }, @@ -138,6 +143,7 @@ Grant full access to all features in the Default space: -------------------------------------------------- $ curl -X PUT api/security/role/my_kibana_role { + "description": "Grants full access to all features in the Default space.", "metadata": { "version": 1 }, @@ -162,6 +168,7 @@ Grant different access to different spaces: -------------------------------------------------- $ curl -X PUT api/security/role/my_kibana_role { + "description": "Grants full access to discover and dashboard features in the default space. Grants read access in the marketing, and sales spaces.", "metadata": { "version": 1 }, @@ -193,6 +200,7 @@ Grant access to {kib} and {es}: -------------------------------------------------- $ curl -X PUT api/security/role/my_kibana_role { + "description": "Grants all cluster privileges and full access to index1 and index2. Grants full access to remote_index1 and remote_index2, and the monitor_enrich cluster privilege on remote_cluster1. Grants all Kibana privileges in the default space.", "metadata": { "version": 1 }, diff --git a/package.json b/package.json index 7906af95566ca..dd5fbd1c06325 100644 --- a/package.json +++ b/package.json @@ -1552,7 +1552,6 @@ "@typescript-eslint/typescript-estree": "^5.62.0", "@wojtekmaj/enzyme-adapter-react-17": "^0.6.7", "@yarnpkg/lockfile": "^1.1.0", - "abab": "^2.0.4", "aggregate-error": "^3.1.0", "apidoc-markdown": "^7.3.0", "argsplit": "^1.0.5", @@ -1571,7 +1570,7 @@ "buildkite-test-collector": "^1.7.0", "callsites": "^3.1.0", "chance": "1.0.18", - "chromedriver": "^123.0.3", + "chromedriver": "^124.0.3", "clean-webpack-plugin": "^3.0.0", "cli-progress": "^3.12.0", "cli-table3": "^0.6.1", @@ -1684,6 +1683,7 @@ "q": "^1.5.1", "raw-loader": "^3.1.0", "react-test-renderer": "^17.0.2", + "recast": "^0.23.7", "regenerate": "^1.4.0", "resolve": "^1.22.0", "rxjs-marbles": "^7.0.1", diff --git a/packages/cloud/connection_details/connection_details.tsx b/packages/cloud/connection_details/connection_details.tsx index d1aabbbc7b958..8d20717e41705 100644 --- a/packages/cloud/connection_details/connection_details.tsx +++ b/packages/cloud/connection_details/connection_details.tsx @@ -7,61 +7,21 @@ */ import * as React from 'react'; -import { EuiSpacer, EuiTab, EuiTabs } from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { useConnectionDetailsOpts } from './context'; +import { useConnectionDetailsService } from './context'; import { EndpointsTab } from './tabs/endpoints_tab'; import { ApiKeysTab } from './tabs/api_keys_tab'; +import { useBehaviorSubject } from './hooks/use_behavior_subject'; export const ConnectionDetails: React.FC = () => { - type TabID = 'endpoints' | 'apiKeys'; - type Tab = [id: TabID, name: string, content: React.ReactNode]; - - const ctx = useConnectionDetailsOpts(); - const [tab, setTab] = React.useState('endpoints'); - - const tabs: Tab[] = []; - - if (ctx.endpoints) { - tabs.push([ - 'endpoints', - i18n.translate('cloud.connectionDetails.tab.endpoints', { - defaultMessage: 'Endpoints', - }), - , - ]); - } - - if (ctx.apiKeys) { - tabs.push([ - 'apiKeys', - i18n.translate('cloud.connectionDetails.tab.apiKeys', { - defaultMessage: 'API key', - }), - , - ]); - } - - if (tabs.length === 0) { - return null; + const service = useConnectionDetailsService(); + const tab = useBehaviorSubject(service.tabId$); + + switch (tab) { + case 'endpoints': + return ; + case 'apiKeys': + return ; + default: + return null; } - - return ( - <> - - {tabs.map(([id, name]) => ( - setTab(id)} - isSelected={tab === id} - data-test-subj={`connectionDetailsTabBtn-${id}`} - > - {name} - - ))} - - - {tabs.find(([id]) => id === tab)?.[2] || null} - - ); }; diff --git a/packages/cloud/connection_details/connection_details_flyout_content.stories.tsx b/packages/cloud/connection_details/connection_details_flyout_content.stories.tsx index 5bd9cd140dfdf..6893acfd8b8b3 100644 --- a/packages/cloud/connection_details/connection_details_flyout_content.stories.tsx +++ b/packages/cloud/connection_details/connection_details_flyout_content.stories.tsx @@ -21,7 +21,7 @@ export default { export const Default = () => { return ( - {}}> + {}}> @@ -31,7 +31,7 @@ export const Default = () => { export const CreationError = () => { return ( - {}}> + {}}> @@ -41,7 +41,7 @@ export const CreationError = () => { export const MissingPermissions = () => { return ( - {}}> + {}}> diff --git a/packages/cloud/connection_details/connection_details_flyout_content.tsx b/packages/cloud/connection_details/connection_details_flyout_content.tsx index 83cf22b45ee3a..9cbe8042caa42 100644 --- a/packages/cloud/connection_details/connection_details_flyout_content.tsx +++ b/packages/cloud/connection_details/connection_details_flyout_content.tsx @@ -18,6 +18,7 @@ import { import { i18n } from '@kbn/i18n'; import { ConnectionDetails } from './connection_details'; import { useConnectionDetailsOpts } from './context'; +import { Tabs } from './tabs'; export const ConnectionDetailsFlyoutContent: React.FC = () => { const ctx = useConnectionDetailsOpts(); @@ -46,6 +47,10 @@ export const ConnectionDetailsFlyoutContent: React.FC = () => { )}

+ {/* The -25px is as per EUI example: https://eui.elastic.co/#/layout/flyout */} +
+ +
); diff --git a/packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx b/packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx index 57f1fe13df4d8..38bc354e9c912 100644 --- a/packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx +++ b/packages/cloud/connection_details/kibana/kibana_connection_details_provider.tsx @@ -35,6 +35,7 @@ const createOpts = async (props: KibanaConnectionDetailsProviderProps) => { endpoints: { id: start.plugins?.cloud?.cloudId, url: start.plugins?.cloud?.elasticsearchUrl, + cloudIdLearMoreLink: docLinks?.links?.cloud?.beatsAndLogstashConfiguration, ...options?.endpoints, }, apiKeys: { diff --git a/packages/cloud/connection_details/service.ts b/packages/cloud/connection_details/service.ts index 2fec4e95d179b..1e59206337baa 100644 --- a/packages/cloud/connection_details/service.ts +++ b/packages/cloud/connection_details/service.ts @@ -10,9 +10,10 @@ import { BehaviorSubject } from 'rxjs'; import { i18n } from '@kbn/i18n'; import { ApiKey } from './tabs/api_keys_tab/views/success_form/types'; import type { Format } from './tabs/api_keys_tab/views/success_form/format_select'; -import type { ConnectionDetailsOpts } from './types'; +import type { ConnectionDetailsOpts, TabID } from './types'; export class ConnectionDetailsService { + public readonly tabId$ = new BehaviorSubject('endpoints'); public readonly showCloudId$ = new BehaviorSubject(false); public readonly apiKeyName$ = new BehaviorSubject(''); public readonly apiKeyStatus$ = new BehaviorSubject<'configuring' | 'creating'>('configuring'); @@ -33,6 +34,10 @@ export class ConnectionDetailsService { }); } + public readonly setTab = (tab: TabID) => { + this.tabId$.next(tab); + }; + public readonly toggleShowCloudId = () => { this.showCloudId$.next(!this.showCloudId$.getValue()); }; diff --git a/packages/cloud/connection_details/stories.tsx b/packages/cloud/connection_details/stories.tsx index e3c9a82beea38..f6d15f181835c 100644 --- a/packages/cloud/connection_details/stories.tsx +++ b/packages/cloud/connection_details/stories.tsx @@ -17,6 +17,7 @@ const defaultOpts: ConnectionDetailsOpts = { endpoints: { url: 'https://f67d6bf1a3cf40888e8863f6cb2cdc4c.us-east-1.aws.staging.foundit.no:443', id: 'my-cluster-id:dXMtZWFzdC0xLmF3cy5zdGFnaW5nLmZvdW5kaXQubm8kZjY3ZDZiZjFhM2NmNDA4ODhlODg2M2Y2Y2IyY2RjNGMkOWViYzEzYjRkOTU0NDI2NDljMzcwZTNlZjMyZWYzOGI=', + cloudIdLearMoreLink: 'https://www.elastic.co/guide/en/cloud/current/ec-cloud-id.html', }, apiKeys: { manageKeysLink: 'https://www.elastic.co/MANAGE_API_KEYS', diff --git a/packages/cloud/connection_details/tabs.tsx b/packages/cloud/connection_details/tabs.tsx new file mode 100644 index 0000000000000..11c08e569a0ce --- /dev/null +++ b/packages/cloud/connection_details/tabs.tsx @@ -0,0 +1,61 @@ +/* + * 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 * as React from 'react'; +import { EuiTab, EuiTabs } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { useConnectionDetailsOpts, useConnectionDetailsService } from './context'; +import { useBehaviorSubject } from './hooks/use_behavior_subject'; +import { TabID } from './types'; + +export const Tabs: React.FC = () => { + type Tab = [id: TabID, name: string]; + + const ctx = useConnectionDetailsOpts(); + const service = useConnectionDetailsService(); + const tab = useBehaviorSubject(service.tabId$); + + const tabs: Tab[] = []; + + if (ctx.endpoints) { + tabs.push([ + 'endpoints', + i18n.translate('cloud.connectionDetails.tab.endpoints', { + defaultMessage: 'Endpoints', + }), + ]); + } + + if (ctx.apiKeys) { + tabs.push([ + 'apiKeys', + i18n.translate('cloud.connectionDetails.tab.apiKeys', { + defaultMessage: 'API key', + }), + ]); + } + + if (tabs.length === 0) { + return null; + } + + return ( + + {tabs.map(([id, name]) => ( + service.setTab(id)} + isSelected={tab === id} + data-test-subj={`connectionDetailsTabBtn-${id}`} + > + {name} + + ))} + + ); +}; diff --git a/packages/cloud/connection_details/tabs/endpoints_tab/rows/cloud_id_row.tsx b/packages/cloud/connection_details/tabs/endpoints_tab/rows/cloud_id_row/cloud_id_row.tsx similarity index 82% rename from packages/cloud/connection_details/tabs/endpoints_tab/rows/cloud_id_row.tsx rename to packages/cloud/connection_details/tabs/endpoints_tab/rows/cloud_id_row/cloud_id_row.tsx index 217bc533e9255..ddaddb8d6ce5d 100644 --- a/packages/cloud/connection_details/tabs/endpoints_tab/rows/cloud_id_row.tsx +++ b/packages/cloud/connection_details/tabs/endpoints_tab/rows/cloud_id_row/cloud_id_row.tsx @@ -9,9 +9,10 @@ import * as React from 'react'; import { EuiFormRow, EuiSpacer, EuiSwitch } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { CopyInput } from '../../../components/copy_input'; -import { useConnectionDetailsService } from '../../../context'; -import { useBehaviorSubject } from '../../../hooks/use_behavior_subject'; +import { CopyInput } from '../../../../components/copy_input'; +import { useConnectionDetailsService } from '../../../../context'; +import { useBehaviorSubject } from '../../../../hooks/use_behavior_subject'; +import { Label } from './label'; export interface CloudIdRowProps { value: string; @@ -38,9 +39,7 @@ export const CloudIdRow: React.FC = ({ value }) => { {showCloudId && ( } helpText={i18n.translate('cloud.connectionDetails.tab.endpoints.cloudIdField.helpText', { defaultMessage: 'Specific client libraries and connectors can use this unique identifier specific to Elastic Cloud.', diff --git a/packages/cloud/connection_details/tabs/endpoints_tab/rows/cloud_id_row/index.ts b/packages/cloud/connection_details/tabs/endpoints_tab/rows/cloud_id_row/index.ts new file mode 100644 index 0000000000000..4539efe04fc97 --- /dev/null +++ b/packages/cloud/connection_details/tabs/endpoints_tab/rows/cloud_id_row/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './cloud_id_row'; diff --git a/packages/cloud/connection_details/tabs/endpoints_tab/rows/cloud_id_row/label.tsx b/packages/cloud/connection_details/tabs/endpoints_tab/rows/cloud_id_row/label.tsx new file mode 100644 index 0000000000000..f856b09abb5fb --- /dev/null +++ b/packages/cloud/connection_details/tabs/endpoints_tab/rows/cloud_id_row/label.tsx @@ -0,0 +1,78 @@ +/* + * 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 * as React from 'react'; +import { + EuiButtonIcon, + EuiFlexGroup, + EuiFlexItem, + EuiLink, + EuiPopover, + EuiText, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; + +export const Label: React.FC<{ learnMoreUrl?: string }> = ({ learnMoreUrl }) => { + const [isPopoverOpen, setIsPopoverOpen] = React.useState(false); + + const labelText = i18n.translate('cloud.connectionDetails.tab.endpoints.cloudIdField.label', { + defaultMessage: 'Cloud ID', + }); + + if (!learnMoreUrl) { + return <>{labelText}; + } + + return ( + + + + {labelText} + + + + { + setIsPopoverOpen((x) => !x); + }} + /> + } + isOpen={isPopoverOpen} + closePopover={() => { + setIsPopoverOpen(false); + }} + anchorPosition="upLeft" + hasArrow={false} + > +

+ + {i18n.translate( + 'cloud.connectionDetails.tab.endpoints.cloudIdField.learnMore', + { + defaultMessage: 'Learn more', + } + )} + + ), + }} + /> +

+
+
+
+ ); +}; diff --git a/packages/cloud/connection_details/types.ts b/packages/cloud/connection_details/types.ts index e7df5adf20bdb..81b51a444ed78 100644 --- a/packages/cloud/connection_details/types.ts +++ b/packages/cloud/connection_details/types.ts @@ -22,6 +22,7 @@ export interface ConnectionDetailsOptsLinks { export interface ConnectionDetailsOptsEndpoints { url?: string; id?: string; + cloudIdLearMoreLink?: string; } export interface ConnectionDetailsOptsApiKeys { @@ -31,3 +32,5 @@ export interface ConnectionDetailsOptsApiKeys { }>; hasPermission: () => Promise; } + +export type TabID = 'endpoints' | 'apiKeys'; diff --git a/packages/core/environment/core-environment-server-internal/src/environment_service.test.ts b/packages/core/environment/core-environment-server-internal/src/environment_service.test.ts index 42063306652f6..47e0380e9111f 100644 --- a/packages/core/environment/core-environment-server-internal/src/environment_service.test.ts +++ b/packages/core/environment/core-environment-server-internal/src/environment_service.test.ts @@ -8,7 +8,7 @@ import { BehaviorSubject } from 'rxjs'; -import type { CoreContext } from '@kbn/core-base-server-internal'; +import { type CoreContext, CriticalError } from '@kbn/core-base-server-internal'; import type { AnalyticsServicePreboot } from '@kbn/core-analytics-server'; import { EnvironmentService } from './environment_service'; @@ -127,36 +127,58 @@ describe('UuidService', () => { warning.name = 'DeprecationWarning'; process.emit('warning', warning); - expect(logger.get('process').warn).not.toHaveBeenCalled(); + expect(logger.get('environment').warn).not.toHaveBeenCalled(); }); }); - // TODO: From Nodejs v16 emitting an unhandledRejection will kill the process - describe.skip('unhandledRejection warnings', () => { - it('logs warn for an unhandeld promise rejected with an Error', async () => { + describe('unhandledRejection warnings', () => { + it('logs warn for an unhandled promise rejected with an Error', async () => { await service.preboot({ analytics }); const err = new Error('something went wrong'); - process.emit('unhandledRejection', err, new Promise((res, rej) => rej(err))); + process.emit('unhandledRejection', err, new Promise((res, rej) => {})); - expect(logger.get('process').warn).toHaveBeenCalledTimes(1); + expect(logger.get('environment').warn).toHaveBeenCalledTimes(1); expect(loggingSystemMock.collect(logger).warn[0][0]).toMatch( /Detected an unhandled Promise rejection: Error: something went wrong\n.*at / ); }); - it('logs warn for an unhandeld promise rejected with a string', async () => { + it('logs warn for an unhandled promise rejected with a string', async () => { await service.preboot({ analytics }); const err = 'something went wrong'; - process.emit('unhandledRejection', err, new Promise((res, rej) => rej(err))); + process.emit('unhandledRejection', err, new Promise((res, rej) => {})); - expect(logger.get('process').warn).toHaveBeenCalledTimes(1); + expect(logger.get('environment').warn).toHaveBeenCalledTimes(1); expect(loggingSystemMock.collect(logger).warn[0][0]).toMatch( /Detected an unhandled Promise rejection: "something went wrong"/ ); }); }); + + describe('uncaughtException warnings', () => { + it('logs warn for an uncaught exception with an Error', async () => { + await service.preboot({ analytics }); + + const err = new Error('something went wrong'); + process.emit('uncaughtExceptionMonitor', err); // Types won't allow me to provide the `origin` + + expect(logger.get('environment').warn).toHaveBeenCalledTimes(1); + expect(loggingSystemMock.collect(logger).warn[0][0]).toMatch( + /Detected an undefined: Error: something went wrong\n.*at / + ); + }); + + it('does not log warn for an uncaught exception with a CriticalError', async () => { + await service.preboot({ analytics }); + + const err = new CriticalError('something went wrong', 'ERROR_CODE', 1234); + process.emit('uncaughtExceptionMonitor', err); // Types won't allow me to provide the `origin` + + expect(logger.get('environment').warn).toHaveBeenCalledTimes(0); + }); + }); }); describe('#setup()', () => { diff --git a/packages/core/environment/core-environment-server-internal/src/environment_service.ts b/packages/core/environment/core-environment-server-internal/src/environment_service.ts index 26e328e2aad71..486297bffb14a 100644 --- a/packages/core/environment/core-environment-server-internal/src/environment_service.ts +++ b/packages/core/environment/core-environment-server-internal/src/environment_service.ts @@ -10,7 +10,7 @@ import { firstValueFrom, of } from 'rxjs'; import { PathConfigType, config as pathConfigDef } from '@kbn/utils'; import type { Logger } from '@kbn/logging'; import type { IConfigService } from '@kbn/config'; -import { CoreContext, coreConfigPaths } from '@kbn/core-base-server-internal'; +import { CoreContext, coreConfigPaths, CriticalError } from '@kbn/core-base-server-internal'; import type { AnalyticsServicePreboot } from '@kbn/core-analytics-server'; import { HttpConfigType } from './types'; import { PidConfigType, pidConfig as pidConfigDef } from './pid_config'; @@ -56,7 +56,7 @@ export class EnvironmentService { public async preboot({ analytics }: EnvironmentServicePrebootDeps) { // IMPORTANT: This code is based on the assumption that none of the configuration values used - // here is supposed to change during preboot phase and it's safe to read them only once. + // here is supposed to change during preboot phase, and it's safe to read them only once. const [pathConfig, serverConfig, pidConfig] = await Promise.all([ firstValueFrom(this.configService.atPath(pathConfigDef.path)), firstValueFrom(this.configService.atPath(coreConfigPaths.http)), @@ -68,6 +68,14 @@ export class EnvironmentService { const message = (reason as Error)?.stack ?? JSON.stringify(reason); this.log.warn(`Detected an unhandled Promise rejection: ${message}`); }); + // Log uncaughtExceptions in our logger before crashing the process: https://github.com/elastic/kibana/issues/183182 + process.on('uncaughtExceptionMonitor', (error, origin) => { + // CriticalErrors are handled in a different path + if (!(error instanceof CriticalError)) { + const message = error?.stack ?? JSON.stringify(error); + this.log.warn(`Detected an ${origin}: ${message}`); + } + }); await createDataFolder({ pathConfig, logger: this.log }); await writePidFile({ pidConfig, logger: this.log }); diff --git a/packages/kbn-apm-synthtrace-client/src/lib/infra/docker_container.ts b/packages/kbn-apm-synthtrace-client/src/lib/infra/docker_container.ts new file mode 100644 index 0000000000000..03f72ee61bc06 --- /dev/null +++ b/packages/kbn-apm-synthtrace-client/src/lib/infra/docker_container.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +/* eslint-disable max-classes-per-file */ +import { Entity, Fields } from '../entity'; +import { Serializable } from '../serializable'; + +interface DockerContainerDocument extends Fields { + 'container.id': string; + 'metricset.name'?: string; +} + +export class DockerContainer extends Entity { + metrics() { + return new DockerContainerMetrics({ + ...this.fields, + 'docker.cpu.total.pct': 25, + 'docker.memory.usage.pct': 20, + }); + } +} + +export interface DockerContainerMetricsDocument extends DockerContainerDocument { + 'docker.cpu.total.pct': number; + 'docker.memory.usage.pct': number; +} + +class DockerContainerMetrics extends Serializable {} + +export function dockerContainer(id: string): DockerContainer { + return new DockerContainer({ + 'container.id': id, + }); +} diff --git a/packages/kbn-apm-synthtrace-client/src/lib/infra/index.ts b/packages/kbn-apm-synthtrace-client/src/lib/infra/index.ts index 961225670e27b..fb81b595c7e2f 100644 --- a/packages/kbn-apm-synthtrace-client/src/lib/infra/index.ts +++ b/packages/kbn-apm-synthtrace-client/src/lib/infra/index.ts @@ -6,14 +6,20 @@ * Side Public License, v 1. */ -import { container, ContainerMetricsDocument } from './container'; +import { dockerContainer, DockerContainerMetricsDocument } from './docker_container'; import { host, HostMetricsDocument } from './host'; +import { k8sContainer, K8sContainerMetricsDocument } from './k8s_container'; import { pod, PodMetricsDocument } from './pod'; -export type InfraDocument = HostMetricsDocument | PodMetricsDocument | ContainerMetricsDocument; +export type InfraDocument = + | HostMetricsDocument + | PodMetricsDocument + | DockerContainerMetricsDocument + | K8sContainerMetricsDocument; export const infra = { host, pod, - container, + dockerContainer, + k8sContainer, }; diff --git a/packages/kbn-apm-synthtrace-client/src/lib/infra/container.ts b/packages/kbn-apm-synthtrace-client/src/lib/infra/k8s_container.ts similarity index 62% rename from packages/kbn-apm-synthtrace-client/src/lib/infra/container.ts rename to packages/kbn-apm-synthtrace-client/src/lib/infra/k8s_container.ts index d9bef38c2fdb5..00d4f0a998960 100644 --- a/packages/kbn-apm-synthtrace-client/src/lib/infra/container.ts +++ b/packages/kbn-apm-synthtrace-client/src/lib/infra/k8s_container.ts @@ -10,30 +10,32 @@ import { Entity, Fields } from '../entity'; import { Serializable } from '../serializable'; -interface ContainerDocument extends Fields { +interface K8sContainerDocument extends Fields { 'container.id': string; 'kubernetes.pod.uid': string; 'kubernetes.node.name': string; 'metricset.name'?: string; } -export class Container extends Entity { +export class K8sContainer extends Entity { metrics() { - return new ContainerMetrics({ + return new K8sContainerMetrics({ ...this.fields, 'kubernetes.container.cpu.usage.limit.pct': 46, + 'kubernetes.container.memory.usage.limit.pct': 30, }); } } -export interface ContainerMetricsDocument extends ContainerDocument { +export interface K8sContainerMetricsDocument extends K8sContainerDocument { 'kubernetes.container.cpu.usage.limit.pct': number; + 'kubernetes.container.memory.usage.limit.pct': number; } -class ContainerMetrics extends Serializable {} +class K8sContainerMetrics extends Serializable {} -export function container(id: string, uid: string, nodeName: string) { - return new Container({ +export function k8sContainer(id: string, uid: string, nodeName: string): K8sContainer { + return new K8sContainer({ 'container.id': id, 'kubernetes.pod.uid': uid, 'kubernetes.node.name': nodeName, diff --git a/packages/kbn-apm-synthtrace-client/src/lib/infra/pod.ts b/packages/kbn-apm-synthtrace-client/src/lib/infra/pod.ts index 9f5c999184176..35ebe94ba6ee1 100644 --- a/packages/kbn-apm-synthtrace-client/src/lib/infra/pod.ts +++ b/packages/kbn-apm-synthtrace-client/src/lib/infra/pod.ts @@ -9,7 +9,7 @@ /* eslint-disable max-classes-per-file */ import { Entity, Fields } from '../entity'; import { Serializable } from '../serializable'; -import { container } from './container'; +import { k8sContainer } from './k8s_container'; interface PodDocument extends Fields { 'kubernetes.pod.uid': string; @@ -26,7 +26,7 @@ export class Pod extends Entity { } container(id: string) { - return container(id, this.fields['kubernetes.pod.uid'], this.fields['kubernetes.node.name']); + return k8sContainer(id, this.fields['kubernetes.pod.uid'], this.fields['kubernetes.node.name']); } } diff --git a/packages/kbn-apm-synthtrace/src/scenarios/infra_docker_containers.ts b/packages/kbn-apm-synthtrace/src/scenarios/infra_docker_containers.ts new file mode 100644 index 0000000000000..c020d2de83db9 --- /dev/null +++ b/packages/kbn-apm-synthtrace/src/scenarios/infra_docker_containers.ts @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { InfraDocument, infra } from '@kbn/apm-synthtrace-client'; + +import { Scenario } from '../cli/scenario'; +import { withClient } from '../lib/utils/with_client'; + +const scenario: Scenario = async (runOptions) => { + return { + generate: ({ range, clients: { infraEsClient } }) => { + const { numContainers = 5 } = runOptions.scenarioOpts || {}; + const { logger } = runOptions; + + const CONTAINERS = Array(numContainers) + .fill(0) + .map((_, idx) => infra.dockerContainer(`container-${idx}`)); + + const containers = range + .interval('30s') + .rate(1) + .generator((timestamp) => + CONTAINERS.flatMap((container) => [container.metrics().timestamp(timestamp)]) + ); + + return [ + withClient( + infraEsClient, + logger.perf('generating_infra_docker_containers', () => containers) + ), + ]; + }, + }; +}; + +export default scenario; diff --git a/packages/kbn-apm-synthtrace/src/scenarios/infra_k8s_containers.ts b/packages/kbn-apm-synthtrace/src/scenarios/infra_k8s_containers.ts new file mode 100644 index 0000000000000..39d2b36b1a03f --- /dev/null +++ b/packages/kbn-apm-synthtrace/src/scenarios/infra_k8s_containers.ts @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { InfraDocument, infra } from '@kbn/apm-synthtrace-client'; + +import { Scenario } from '../cli/scenario'; +import { withClient } from '../lib/utils/with_client'; + +const scenario: Scenario = async (runOptions) => { + return { + generate: ({ range, clients: { infraEsClient } }) => { + const { numContainers = 5 } = runOptions.scenarioOpts || {}; + const { logger } = runOptions; + + const CONTAINERS = Array(numContainers) + .fill(0) + .map((_, idx) => infra.k8sContainer(`container-${idx}`, `pod-${idx}`, `node-${idx}`)); + + const containers = range + .interval('30s') + .rate(1) + .generator((timestamp) => + CONTAINERS.flatMap((container) => [container.metrics().timestamp(timestamp)]) + ); + + return [ + withClient( + infraEsClient, + logger.perf('generating_infra_containers', () => containers) + ), + ]; + }, + }; +}; + +export default scenario; diff --git a/packages/kbn-discover-utils/src/data_types/index.ts b/packages/kbn-discover-utils/src/data_types/index.ts new file mode 100644 index 0000000000000..1bb391b454f28 --- /dev/null +++ b/packages/kbn-discover-utils/src/data_types/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './logs'; diff --git a/packages/kbn-discover-utils/src/data_types/logs/index.ts b/packages/kbn-discover-utils/src/data_types/logs/index.ts new file mode 100644 index 0000000000000..21d54fd754a3e --- /dev/null +++ b/packages/kbn-discover-utils/src/data_types/logs/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './types'; +export * from './utils'; diff --git a/x-pack/plugins/observability_solution/logs_explorer/common/document.ts b/packages/kbn-discover-utils/src/data_types/logs/types.ts similarity index 89% rename from x-pack/plugins/observability_solution/logs_explorer/common/document.ts rename to packages/kbn-discover-utils/src/data_types/logs/types.ts index 778d8546c2d1c..27a4313fe2548 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/common/document.ts +++ b/packages/kbn-discover-utils/src/data_types/logs/types.ts @@ -1,11 +1,12 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ -import type { DataTableRecord } from '@kbn/discover-utils/src/types'; +import { DataTableRecord } from '../../types'; export interface LogDocument extends DataTableRecord { flattened: { @@ -40,7 +41,7 @@ export interface LogDocument extends DataTableRecord { }; } -export interface FlyoutDoc { +export interface LogFlyoutDoc { '@timestamp': string; 'log.level'?: string; message?: string; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/utils/get_field_from_flattened_doc.ts b/packages/kbn-discover-utils/src/data_types/logs/utils/get_field_from_doc.ts similarity index 65% rename from x-pack/plugins/observability_solution/logs_explorer/public/utils/get_field_from_flattened_doc.ts rename to packages/kbn-discover-utils/src/data_types/logs/utils/get_field_from_doc.ts index 7d05d9ab61583..f399976dcb85a 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/utils/get_field_from_flattened_doc.ts +++ b/packages/kbn-discover-utils/src/data_types/logs/utils/get_field_from_doc.ts @@ -1,11 +1,12 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { LogDocument } from '../../common/document'; +import { LogDocument } from '../types'; type Field = keyof LogDocument['flattened']; diff --git a/packages/kbn-discover-utils/src/data_types/logs/utils/index.ts b/packages/kbn-discover-utils/src/data_types/logs/utils/index.ts new file mode 100644 index 0000000000000..1c26d5efff12d --- /dev/null +++ b/packages/kbn-discover-utils/src/data_types/logs/utils/index.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './get_field_from_doc'; diff --git a/packages/kbn-discover-utils/src/index.ts b/packages/kbn-discover-utils/src/index.ts index b1dc190111746..0e811d862b6ff 100644 --- a/packages/kbn-discover-utils/src/index.ts +++ b/packages/kbn-discover-utils/src/index.ts @@ -10,3 +10,4 @@ export * from './constants'; export * as fieldConstants from './field_constants'; export * from './hooks'; export * from './utils'; +export * from './data_types'; diff --git a/packages/kbn-es/src/cluster.ts b/packages/kbn-es/src/cluster.ts index e2ddf43f32dc7..65e232a9bbd48 100644 --- a/packages/kbn-es/src/cluster.ts +++ b/packages/kbn-es/src/cluster.ts @@ -89,8 +89,9 @@ export class Cluster { async installSource(options: InstallSourceOptions) { this.log.info(chalk.bold('Installing from source')); return await this.log.indent(4, async () => { - const { installPath } = await installSource({ log: this.log, ...options }); - return { installPath }; + const { installPath, disableEsTmpDir } = await installSource({ log: this.log, ...options }); + + return { installPath, disableEsTmpDir }; }); } @@ -115,12 +116,12 @@ export class Cluster { async installSnapshot(options: InstallSnapshotOptions) { this.log.info(chalk.bold('Installing from snapshot')); return await this.log.indent(4, async () => { - const { installPath } = await installSnapshot({ + const { installPath, disableEsTmpDir } = await installSnapshot({ log: this.log, ...options, }); - return { installPath }; + return { installPath, disableEsTmpDir }; }); } @@ -130,12 +131,12 @@ export class Cluster { async installArchive(archivePath: string, options?: InstallArchiveOptions) { this.log.info(chalk.bold('Installing from an archive')); return await this.log.indent(4, async () => { - const { installPath } = await installArchive(archivePath, { + const { installPath, disableEsTmpDir } = await installArchive(archivePath, { log: this.log, ...(options || {}), }); - return { installPath }; + return { installPath, disableEsTmpDir }; }); } @@ -317,6 +318,7 @@ export class Cluster { skipReadyCheck, readyTimeout, writeLogsToPath, + disableEsTmpDir, ...options } = opts; @@ -389,7 +391,9 @@ export class Cluster { this.process = execa(ES_BIN, args, { cwd: installPath, env: { - ...(installPath ? { ES_TMPDIR: path.resolve(installPath, 'ES_TMPDIR') } : {}), + ...(installPath && !disableEsTmpDir + ? { ES_TMPDIR: path.resolve(installPath, 'ES_TMPDIR') } + : {}), ...process.env, JAVA_HOME: '', // By default, we want to always unset JAVA_HOME so that the bundled JDK will be used ES_JAVA_OPTS: esJavaOpts, diff --git a/packages/kbn-es/src/cluster_exec_options.ts b/packages/kbn-es/src/cluster_exec_options.ts index 30aeabbab903a..362af62c57954 100644 --- a/packages/kbn-es/src/cluster_exec_options.ts +++ b/packages/kbn-es/src/cluster_exec_options.ts @@ -17,4 +17,6 @@ export interface EsClusterExecOptions { readyTimeout?: number; onEarlyExit?: (msg: string) => void; writeLogsToPath?: string; + /** Disable creating a temp directory, allowing ES to write to OS's /tmp directory */ + disableEsTmpDir?: boolean; } diff --git a/packages/kbn-es/src/install/install_archive.ts b/packages/kbn-es/src/install/install_archive.ts index 78e200d4d47fb..2bfef3ab7abef 100644 --- a/packages/kbn-es/src/install/install_archive.ts +++ b/packages/kbn-es/src/install/install_archive.ts @@ -40,6 +40,7 @@ export async function installArchive(archive: string, options?: InstallArchiveOp installPath = path.resolve(basePath, path.basename(archive, '.tar.gz')), log = defaultLog, esArgs = [], + disableEsTmpDir = process.env.FTR_DISABLE_ES_TMPDIR?.toLowerCase() === 'true', } = options || {}; let dest = archive; @@ -62,9 +63,16 @@ export async function installArchive(archive: string, options?: InstallArchiveOp }); log.info('extracted to %s', chalk.bold(installPath)); - const tmpdir = path.resolve(installPath, 'ES_TMPDIR'); - fs.mkdirSync(tmpdir, { recursive: true }); - log.info('created %s', chalk.bold(tmpdir)); + /** + * If we're running inside a Vagrant VM, and this is running in a synced folder, + * ES will fail to start due to ML being unable to write a pipe in the synced folder. + * Disabling allows ES to write to the OS's /tmp directory. + */ + if (!disableEsTmpDir) { + const tmpdir = path.resolve(installPath, 'ES_TMPDIR'); + fs.mkdirSync(tmpdir, { recursive: true }); + log.info('created %s', chalk.bold(tmpdir)); + } // starting in 6.3, security is disabled by default. Since we bootstrap // the keystore, we can enable security ourselves. @@ -76,7 +84,7 @@ export async function installArchive(archive: string, options?: InstallArchiveOp ...parseSettings(esArgs, { filter: SettingsFilter.SecureOnly }), ]); - return { installPath }; + return { installPath, disableEsTmpDir }; } /** diff --git a/packages/kbn-es/src/install/types.ts b/packages/kbn-es/src/install/types.ts index e4b750c0ec472..6217f5b93c7f6 100644 --- a/packages/kbn-es/src/install/types.ts +++ b/packages/kbn-es/src/install/types.ts @@ -40,4 +40,6 @@ export interface InstallArchiveOptions { installPath?: string; log?: ToolingLog; esArgs?: string[]; + /** Disable creating a temp directory, allowing ES to write to OS's /tmp directory */ + disableEsTmpDir?: boolean; } diff --git a/packages/kbn-es/src/integration_tests/cluster.test.ts b/packages/kbn-es/src/integration_tests/cluster.test.ts index e8246558732c0..0ef9803539fdd 100644 --- a/packages/kbn-es/src/integration_tests/cluster.test.ts +++ b/packages/kbn-es/src/integration_tests/cluster.test.ts @@ -179,13 +179,13 @@ describe('#downloadSnapshot()', () => { }); describe('#installSource()', () => { - test('awaits installSource() promise and returns { installPath }', async () => { + test('awaits installSource() promise and returns { installPath, disableEsTmpDir }', async () => { let resolveInstallSource: Function; installSourceMock.mockImplementationOnce( () => new Promise((resolve) => { resolveInstallSource = () => { - resolve({ installPath: 'foo' }); + resolve({ installPath: 'foo', disableEsTmpDir: false }); }; }) ); @@ -196,11 +196,12 @@ describe('#installSource()', () => { resolveInstallSource!(); await expect(ensureResolve(promise, 'installSource()')).resolves.toEqual({ installPath: 'foo', + disableEsTmpDir: false, }); }); test('passes through all options+log to installSource()', async () => { - installSourceMock.mockResolvedValue({ installPath: 'foo' }); + installSourceMock.mockResolvedValue({ installPath: 'foo', disableEsTmpDir: false }); const options: InstallSourceOptions = { sourcePath: 'bar', license: 'trial', @@ -228,13 +229,13 @@ describe('#installSource()', () => { }); describe('#installSnapshot()', () => { - test('awaits installSnapshot() promise and returns { installPath }', async () => { + test('awaits installSnapshot() promise and returns { installPath, disableEsTmpDir }', async () => { let resolveInstallSnapshot: Function; installSnapshotMock.mockImplementationOnce( () => new Promise((resolve) => { resolveInstallSnapshot = () => { - resolve({ installPath: 'foo' }); + resolve({ installPath: 'foo', disableEsTmpDir: false }); }; }) ); @@ -245,11 +246,12 @@ describe('#installSnapshot()', () => { resolveInstallSnapshot!(); await expect(ensureResolve(promise, 'installSnapshot()')).resolves.toEqual({ installPath: 'foo', + disableEsTmpDir: false, }); }); test('passes through all options+log to installSnapshot()', async () => { - installSnapshotMock.mockResolvedValue({ installPath: 'foo' }); + installSnapshotMock.mockResolvedValue({ installPath: 'foo', disableEsTmpDir: false }); const options: InstallSnapshotOptions = { version: '8.10.0', license: 'trial', @@ -278,13 +280,13 @@ describe('#installSnapshot()', () => { }); describe('#installArchive()', () => { - test('awaits installArchive() promise and returns { installPath }', async () => { + test('awaits installArchive() promise and returns { installPath, disableEsTmpDir }', async () => { let resolveInstallArchive: Function; installArchiveMock.mockImplementationOnce( () => new Promise((resolve) => { resolveInstallArchive = () => { - resolve({ installPath: 'foo' }); + resolve({ installPath: 'foo', disableEsTmpDir: false }); }; }) ); @@ -295,11 +297,12 @@ describe('#installArchive()', () => { resolveInstallArchive!(); await expect(ensureResolve(promise, 'installArchive()')).resolves.toEqual({ installPath: 'foo', + disableEsTmpDir: false, }); }); test('passes through all options+log to installArchive()', async () => { - installArchiveMock.mockResolvedValue({ installPath: 'foo' }); + installArchiveMock.mockResolvedValue({ installPath: 'foo', disableEsTmpDir: true }); const options: InstallArchiveOptions = { license: 'trial', password: 'changeme', @@ -307,6 +310,7 @@ describe('#installArchive()', () => { installPath: 'someInstallPath', esArgs: ['foo=true'], log, + disableEsTmpDir: true, }; const cluster = new Cluster({ log }); await cluster.installArchive('bar', options); diff --git a/packages/kbn-esql-validation-autocomplete/README.md b/packages/kbn-esql-validation-autocomplete/README.md index f146ff876df40..fb82a67b9171f 100644 --- a/packages/kbn-esql-validation-autocomplete/README.md +++ b/packages/kbn-esql-validation-autocomplete/README.md @@ -11,6 +11,8 @@ src | code_actions // => the quick fixes service logic | definitions // => static assets to define all components behaviour of a ES|QL query: commands, functions, etc... | validation // => the validation logic + +scripts // => scripts used to manage the validation engine code ``` ### Basic usage @@ -45,12 +47,12 @@ import { validateQuery } from '@kbn/esql-validation-autocomplete'; // define only the getSources callback const myCallbacks = { - getSources: async () => [{name: 'index', hidden: false}], + getSources: async () => [{ name: 'index', hidden: false }], }; // ignore errors that might be triggered by the lack of some callbacks (i.e. "Unknown columns", etc...) const { errors, warnings } = await validateQuery( - "from index | stats 1 + avg(myColumn)", + 'from index | stats 1 + avg(myColumn)', getAstAndSyntaxErrors, { ignoreOnMissingCallbacks: true }, myCallbacks @@ -161,12 +163,12 @@ For instance to show contextual information on Hover the `getAstContext` functio import { getAstAndSyntaxErrors } from '@kbn/esql-ast'; import { getAstContext } from '@kbn/esql-validation-autocomplete'; -const queryString = "from index2 | stats 1 + avg(myColumn)"; -const offset = queryString.indexOf("avg"); +const queryString = 'from index2 | stats 1 + avg(myColumn)'; +const offset = queryString.indexOf('avg'); const astContext = getAstContext(queryString, getAstAndSyntaxErrors(queryString), offset); -if(astContext.type === "function"){ +if (astContext.type === 'function') { const fnNode = astContext.node; const fnDefinition = getFunctionDefinition(fnNode.name); @@ -175,7 +177,6 @@ if(astContext.type === "function"){ } ``` - ### How does it work The general idea of this package is to provide all ES|QL features on top of a custom compact AST definition (all data structure types defined in `@kbn/esql-ast`) which is designed to be resilient to many grammar changes. @@ -211,9 +212,9 @@ The most complex case is the `expression` as it can cover a moltitude of cases. ### Adding new commands/options/functions/erc... To update the definitions: + 1. open either approriate definition file within the `definitions` folder and add a new entry to the relative array -2. write new tests for validation and autocomplete - * if a new function is added tests are automatically generated fro both validation and autocomplete with some standard checks - * if a new function requires a new field types, make sure to add the new type to the initial part of the test file - * this will be automatically picked up by the test generator to produce new test cases - * if a new function requires a new type of test, make sure to write it manually \ No newline at end of file +2. if you are adding a function, run `yarn maketests` to add a set of fundamental validation tests for the new definition. If any of the suggested tests are wrong, feel free to correct them by hand. If it seems like a general problem, open an issue with the details so that we can update the generator code. +3. write new tests for validation and autocomplete + +- if a new function requires a new type of test, make sure to write it manually diff --git a/packages/kbn-esql-validation-autocomplete/package.json b/packages/kbn-esql-validation-autocomplete/package.json index 1589e4aaba238..5d3773ed082b8 100644 --- a/packages/kbn-esql-validation-autocomplete/package.json +++ b/packages/kbn-esql-validation-autocomplete/package.json @@ -1,7 +1,10 @@ { - "name": "@kbn/esql-validation-autocomplete", - "version": "1.0.0", - "private": true, - "license": "SSPL-1.0 OR Elastic License 2.0", - "sideEffects": false - } \ No newline at end of file + "name": "@kbn/esql-validation-autocomplete", + "version": "1.0.0", + "private": true, + "license": "SSPL-1.0 OR Elastic License 2.0", + "sideEffects": false, + "scripts": { + "maketests": "ts-node --transpileOnly ./scripts/generate_function_validation_tests.ts" + } +} 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 new file mode 100644 index 0000000000000..2b68d96a4195c --- /dev/null +++ b/packages/kbn-esql-validation-autocomplete/scripts/generate_function_validation_tests.ts @@ -0,0 +1,1248 @@ +/* + * 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 { readFileSync, writeFileSync } from 'fs'; +import { camelCase } from 'lodash'; +import { join } from 'path'; +import * as recast from 'recast'; +import { statsAggregationFunctionDefinitions } from '../src/definitions/aggs'; +import { evalFunctionsDefinitions } 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 { FUNCTION_DESCRIBE_BLOCK_NAME } from '../src/validation/function_describe_block_name'; + +function main() { + const testCasesByFunction: Map> = new Map(); + + for (const definition of evalFunctionsDefinitions) { + testCasesByFunction.set(definition.name, generateTestsForEvalFunction(definition)); + } + + for (const definition of statsAggregationFunctionDefinitions) { + testCasesByFunction.set(definition.name, generateTestsForAggFunction(definition)); + } + + for (const definition of groupingFunctionDefinitions) { + testCasesByFunction.set(definition.name, generateTestsForGroupingFunction(definition)); + } + + writeTestsToFile(testCasesByFunction); +} + +function generateTestsForEvalFunction(definition: FunctionDefinition) { + const testCases: Map = new Map(); + generateRowCommandTestsForEvalFunction(definition, testCases); + generateWhereCommandTestsForEvalFunction(definition, testCases); + generateEvalCommandTestsForEvalFunction(definition, testCases); + generateSortCommandTestsForEvalFunction(definition, testCases); + return testCases; +} + +function generateTestsForAggFunction(definition: FunctionDefinition) { + const testCases: Map = new Map(); + generateStatsCommandTestsForAggFunction(definition, testCases); + generateSortCommandTestsForAggFunction(definition, testCases); + generateWhereCommandTestsForAggFunction(definition, testCases); + generateEvalCommandTestsForAggFunction(definition, testCases); + return testCases; +} + +function generateTestsForGroupingFunction(definition: FunctionDefinition) { + const testCases: Map = new Map(); + generateStatsCommandTestsForGroupingFunction(definition, testCases); + generateSortCommandTestsForGroupingFunction(definition, testCases); + return testCases; +} + +function generateRowCommandTestsForEvalFunction( + { name, alias, signatures, ...defRest }: FunctionDefinition, + testCases: Map +) { + if (name === 'date_diff') return; + for (const { params, ...signRest } of signatures) { + // ROW command stuff + const fieldMapping = getFieldMapping(params); + const signatureStringCorrect = tweakSignatureForRowCommand( + getFunctionSignatures( + { name, ...defRest, signatures: [{ params: fieldMapping, ...signRest }] }, + { withTypes: false } + )[0].declaration + ); + + testCases.set(`row var = ${signatureStringCorrect}`, []); + testCases.set(`row ${signatureStringCorrect}`, []); + + if (alias) { + for (const otherName of alias) { + const signatureStringWithAlias = tweakSignatureForRowCommand( + getFunctionSignatures( + { + name: otherName, + ...defRest, + signatures: [{ params: fieldMapping, ...signRest }], + }, + { withTypes: false } + )[0].declaration + ); + + testCases.set(`row var = ${signatureStringWithAlias}`, []); + } + } + + // Skip functions that have only arguments of type "any", as it is not possible to pass "the wrong type". + // to_version functions are a bit harder to test exactly a combination of argument and predict the + // the right error message + if ( + params.every(({ type }) => type !== 'any') && + ![ + 'to_version', + 'mv_sort', + // skip the date functions because the row tests always throw in + // a string literal and expect it to be invalid for the date functions + // but it's always valid because ES will parse it as a date + 'date_diff', + 'date_extract', + 'date_format', + 'date_trunc', + ].includes(name) + ) { + // now test nested functions + const fieldMappingWithNestedFunctions = getFieldMapping(params, { + useNestedFunction: true, + useLiterals: true, + }); + const signatureString = tweakSignatureForRowCommand( + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMappingWithNestedFunctions, ...signRest }], + }, + { withTypes: false } + )[0].declaration + ); + + 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); + } + } +} + +function generateWhereCommandTestsForEvalFunction( + { name, signatures, ...rest }: FunctionDefinition, + testCases: Map +) { + // Test that all functions work in where + // TODO: not sure why there's this constraint... + const supportedFunction = signatures.some( + ({ returnType, params }) => + ['number', 'string'].includes(returnType) && + params.every(({ type }) => ['number', 'string'].includes(type)) + ); + + if (!supportedFunction) { + return; + } + + const supportedSignatures = signatures.filter(({ returnType }) => + // TODO — not sure why the tests have this limitation... seems like any type + // that can be part of a boolean expression should be allowed in a where clause + ['number', 'string'].includes(returnType) + ); + for (const { params, returnType, ...restSign } of supportedSignatures) { + const correctMapping = getFieldMapping(params); + testCases.set( + `from a_index | where ${returnType !== 'number' ? 'length(' : ''}${ + // hijacking a bit this function to produce a function call + getFunctionSignatures( + { + name, + ...rest, + signatures: [{ params: correctMapping, returnType, ...restSign }], + }, + { withTypes: false } + )[0].declaration + }${returnType !== 'number' ? ')' : ''} > 0`, + [] + ); + + const { wrongFieldMapping, expectedErrors } = generateIncorrectlyTypedParameters( + name, + signatures, + params, + { stringField: 'stringField', numberField: 'numberField', booleanField: 'booleanField' } + ); + testCases.set( + `from a_index | where ${returnType !== 'number' ? 'length(' : ''}${ + // hijacking a bit this function to produce a function call + getFunctionSignatures( + { + name, + ...rest, + signatures: [{ params: wrongFieldMapping, returnType, ...restSign }], + }, + { withTypes: false } + )[0].declaration + }${returnType !== 'number' ? ')' : ''} > 0`, + expectedErrors + ); + } +} + +function generateWhereCommandTestsForAggFunction( + { name, alias, signatures, ...defRest }: FunctionDefinition, + testCases: Map +) { + // statsSignatures.some(({ returnType, params }) => ['number'].includes(returnType)) + for (const { params, ...signRest } of signatures) { + const fieldMapping = getFieldMapping(params); + + testCases.set( + `from a_index | where ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMapping, ...signRest }], + }, + { withTypes: false } + )[0].declaration + }`, + [`WHERE does not support function ${name}`] + ); + + testCases.set( + `from a_index | where ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMapping, ...signRest }], + }, + { withTypes: false } + )[0].declaration + } > 0`, + [`WHERE does not support function ${name}`] + ); + } +} + +function generateEvalCommandTestsForEvalFunction( + { name, signatures, alias, ...defRest }: FunctionDefinition, + testCases: Map +) { + for (const { params, ...signRest } of signatures) { + const fieldMapping = getFieldMapping(params); + testCases.set( + `from a_index | eval var = ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMapping, ...signRest }], + }, + { withTypes: false } + )[0].declaration + }`, + [] + ); + testCases.set( + `from a_index | eval ${ + getFunctionSignatures( + { name, ...defRest, signatures: [{ params: fieldMapping, ...signRest }] }, + { withTypes: false } + )[0].declaration + }`, + [] + ); + if (params.some(({ constantOnly }) => constantOnly)) { + const fieldReplacedType = params + .filter(({ constantOnly }) => constantOnly) + .map(({ type }) => type); + // create the mapping without the literal flag + // this will make the signature wrong on purpose where in place on constants + // the arg will be a column of the same type + const fieldMappingWithoutLiterals = getFieldMapping( + params.map(({ constantOnly, ...rest }) => rest) + ); + testCases.set( + `from a_index | eval ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMappingWithoutLiterals, ...signRest }], + }, + { withTypes: false } + )[0].declaration + }`, + fieldReplacedType.map( + (type) => `Argument of [${name}] must be a constant, received [${type}Field]` + ) + ); + } + + if (alias) { + for (const otherName of alias) { + const signatureStringWithAlias = getFunctionSignatures( + { + name: otherName, + ...defRest, + signatures: [{ params: fieldMapping, ...signRest }], + }, + { withTypes: false } + )[0].declaration; + + testCases.set(`from a_index | eval var = ${signatureStringWithAlias}`, []); + } + } + + // Skip functions that have only arguments of type "any", as it is not possible to pass "the wrong type". + // to_version functions are a bit harder to test exactly a combination of argument and predict the + // the right error message + if (params.every(({ type }) => type !== 'any') && !['to_version', 'mv_sort'].includes(name)) { + // now test nested functions + const fieldMappingWithNestedFunctions = getFieldMapping(params, { + useNestedFunction: true, + useLiterals: true, + }); + testCases.set( + `from a_index | eval var = ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMappingWithNestedFunctions, ...signRest }], + }, + { withTypes: false } + )[0].declaration + }`, + [] + ); + + const { wrongFieldMapping, expectedErrors } = generateIncorrectlyTypedParameters( + name, + signatures, + params, + { + stringField: 'stringField', + numberField: 'numberField', + booleanField: 'booleanField', + } + ); + testCases.set( + `from a_index | eval ${ + getFunctionSignatures( + { name, ...defRest, signatures: [{ params: wrongFieldMapping, ...signRest }] }, + { withTypes: false } + )[0].declaration + }`, + 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 + if (fieldMapping.length === 1 && !signRest.minParams) { + const fieldMappingWithWildcard = [...fieldMapping]; + fieldMappingWithWildcard[0].name = '*'; + + testCases.set( + `from a_index | eval var = ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMappingWithWildcard, ...signRest }], + }, + { withTypes: false } + )[0].declaration + }`, + [`Using wildcards (*) in ${name} is not allowed`] + ); + } + } +} + +function generateEvalCommandTestsForAggFunction( + { name, signatures, alias, ...defRest }: FunctionDefinition, + testCases: Map +) { + for (const { params, ...signRest } of signatures) { + const fieldMapping = getFieldMapping(params); + testCases.set( + `from a_index | eval var = ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMapping, ...signRest }], + }, + { withTypes: false } + )[0].declaration + }`, + [`EVAL does not support function ${name}`] + ); + + testCases.set( + `from a_index | eval var = ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMapping, ...signRest }], + }, + { withTypes: false } + )[0].declaration + } > 0`, + [`EVAL does not support function ${name}`] + ); + + testCases.set( + `from a_index | eval ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMapping, ...signRest }], + }, + { withTypes: false } + )[0].declaration + }`, + [`EVAL does not support function ${name}`] + ); + + testCases.set( + `from a_index | eval ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMapping, ...signRest }], + }, + { withTypes: false } + )[0].declaration + } > 0`, + [`EVAL does not support function ${name}`] + ); + } +} + +function generateStatsCommandTestsForAggFunction( + { name, signatures, alias, ...defRest }: FunctionDefinition, + testCases: Map +) { + for (const { params, ...signRest } of signatures) { + const fieldMapping = getFieldMapping(params); + + const correctSignature = getFunctionSignatures( + { name, ...defRest, signatures: [{ params: fieldMapping, ...signRest }] }, + { withTypes: false } + )[0].declaration; + testCases.set(`from a_index | stats var = ${correctSignature}`, []); + testCases.set(`from a_index | stats ${correctSignature}`, []); + + if (signRest.returnType === 'number') { + testCases.set(`from a_index | stats var = round(${correctSignature})`, []); + testCases.set(`from a_index | stats round(${correctSignature})`, []); + testCases.set( + `from a_index | stats var = round(${correctSignature}) + ${correctSignature}`, + [] + ); + testCases.set(`from a_index | stats round(${correctSignature}) + ${correctSignature}`, []); + } + + if (params.some(({ constantOnly }) => constantOnly)) { + const fieldReplacedType = params + .filter(({ constantOnly }) => constantOnly) + .map(({ type }) => type); + // create the mapping without the literal flag + // this will make the signature wrong on purpose where in place on constants + // the arg will be a column of the same type + const fieldMappingWithoutLiterals = getFieldMapping( + params.map(({ constantOnly, ...rest }) => rest) + ); + testCases.set( + `from a_index | stats ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMappingWithoutLiterals, ...signRest }], + }, + { withTypes: false } + )[0].declaration + }`, + fieldReplacedType.map( + (type) => `Argument of [${name}] must be a constant, received [${type}Field]` + ) + ); + } + + if (alias) { + for (const otherName of alias) { + const signatureStringWithAlias = getFunctionSignatures( + { + name: otherName, + ...defRest, + signatures: [{ params: fieldMapping, ...signRest }], + }, + { withTypes: false } + )[0].declaration; + + testCases.set(`from a_index | stats var = ${signatureStringWithAlias}`, []); + } + } + + // test only numeric functions for now + if (params[0].type === 'number') { + const nestedBuiltin = 'numberField / 2'; + const fieldMappingWithNestedBuiltinFunctions = getFieldMapping(params); + fieldMappingWithNestedBuiltinFunctions[0].name = nestedBuiltin; + + const fnSignatureWithBuiltinString = getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMappingWithNestedBuiltinFunctions, ...signRest }], + }, + { withTypes: false } + )[0].declaration; + // from a_index | STATS aggFn( numberField / 2 ) + testCases.set(`from a_index | stats ${fnSignatureWithBuiltinString}`, []); + testCases.set(`from a_index | stats var0 = ${fnSignatureWithBuiltinString}`, []); + testCases.set(`from a_index | stats avg(numberField), ${fnSignatureWithBuiltinString}`, []); + testCases.set( + `from a_index | stats avg(numberField), var0 = ${fnSignatureWithBuiltinString}`, + [] + ); + + const nestedEvalAndBuiltin = 'round(numberField / 2)'; + const fieldMappingWithNestedEvalAndBuiltinFunctions = getFieldMapping(params); + fieldMappingWithNestedBuiltinFunctions[0].name = nestedEvalAndBuiltin; + + const fnSignatureWithEvalAndBuiltinString = getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMappingWithNestedEvalAndBuiltinFunctions, ...signRest }], + }, + { withTypes: false } + )[0].declaration; + // from a_index | STATS aggFn( round(numberField / 2) ) + testCases.set(`from a_index | stats ${fnSignatureWithEvalAndBuiltinString}`, []); + testCases.set(`from a_index | stats var0 = ${fnSignatureWithEvalAndBuiltinString}`, []); + testCases.set( + `from a_index | stats avg(numberField), ${fnSignatureWithEvalAndBuiltinString}`, + [] + ); + testCases.set( + `from a_index | stats avg(numberField), var0 = ${fnSignatureWithEvalAndBuiltinString}`, + [] + ); + // from a_index | STATS aggFn(round(numberField / 2) ) BY round(numberField / 2) + testCases.set( + `from a_index | stats ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}`, + [] + ); + testCases.set( + `from a_index | stats var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}`, + [] + ); + testCases.set( + `from a_index | stats avg(numberField), ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}, ipField`, + [] + ); + testCases.set( + `from a_index | stats avg(numberField), var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}, ipField`, + [] + ); + testCases.set( + `from a_index | stats avg(numberField), ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}, ${nestedBuiltin}`, + [] + ); + testCases.set( + `from a_index | stats avg(numberField), var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}, ${nestedBuiltin}`, + [] + ); + } + + // Skip functions that have only arguments of type "any", as it is not possible to pass "the wrong type". + // to_version is a bit harder to test exactly a combination of argument and predict the + // the right error message + if (params.every(({ type }) => type !== 'any') && !['to_version', 'mv_sort'].includes(name)) { + // now test nested functions + const fieldMappingWithNestedAggsFunctions = getFieldMapping(params, { + useNestedFunction: true, + useLiterals: false, + }); + const nestedAggsExpectedErrors = params + .filter(({ constantOnly }) => !constantOnly) + .map( + (_) => + `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]` + ); + testCases.set( + `from a_index | stats var = ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMappingWithNestedAggsFunctions, ...signRest }], + }, + { withTypes: false } + )[0].declaration + }`, + nestedAggsExpectedErrors + ); + testCases.set( + `from a_index | stats ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMappingWithNestedAggsFunctions, ...signRest }], + }, + { withTypes: false } + )[0].declaration + }`, + nestedAggsExpectedErrors + ); + const { wrongFieldMapping, expectedErrors } = generateIncorrectlyTypedParameters( + name, + signatures, + params, + { + stringField: 'stringField', + numberField: 'numberField', + booleanField: 'booleanField', + } + ); + // and the message is case of wrong argument type is passed + testCases.set( + `from a_index | stats ${ + getFunctionSignatures( + { name, ...defRest, signatures: [{ params: wrongFieldMapping, ...signRest }] }, + { withTypes: false } + )[0].declaration + }`, + expectedErrors + ); + + // test that only count() accepts wildcard as arg + // just check that the function accepts only 1 arg as the parser cannot handle multiple args with * as start arg + if (fieldMapping.length === 1) { + const fieldMappingWithWildcard = [...fieldMapping]; + fieldMappingWithWildcard[0].name = '*'; + + testCases.set( + `from a_index | stats var = ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMappingWithWildcard, ...signRest }], + }, + { withTypes: false } + )[0].declaration + }`, + name === 'count' ? [] : [`Using wildcards (*) in ${name} is not allowed`] + ); + } + } + } +} + +function generateStatsCommandTestsForGroupingFunction( + { name, signatures, alias, ...defRest }: FunctionDefinition, + testCases: Map +) { + for (const { params, ...signRest } of signatures) { + const fieldMapping = getFieldMapping(params); + + const correctSignature = getFunctionSignatures( + { name, ...defRest, signatures: [{ params: fieldMapping, ...signRest }] }, + { withTypes: false } + )[0].declaration; + testCases.set(`from a_index | stats by ${correctSignature}`, []); + + if (params.some(({ constantOnly }) => constantOnly)) { + const fieldReplacedType = params + .filter(({ constantOnly }) => constantOnly) + .map(({ type }) => type); + // create the mapping without the literal flag + // this will make the signature wrong on purpose where in place on constants + // the arg will be a column of the same type + const fieldMappingWithoutLiterals = getFieldMapping( + params.map(({ constantOnly, ...rest }) => rest) + ); + testCases.set( + `from a_index | stats by ${ + getFunctionSignatures( + { + name, + ...defRest, + signatures: [{ params: fieldMappingWithoutLiterals, ...signRest }], + }, + { withTypes: false } + )[0].declaration + }`, + fieldReplacedType + // if a param of type time_literal or chrono_literal it will always be a literal + // so no way to test the constantOnly thing + .filter((type) => !['time_literal', 'chrono_literal'].includes(type)) + .map((type) => `Argument of [${name}] must be a constant, received [${type}Field]`) + ); + } + + if (alias) { + for (const otherName of alias) { + const signatureStringWithAlias = getFunctionSignatures( + { + name: otherName, + ...defRest, + signatures: [{ params: fieldMapping, ...signRest }], + }, + { withTypes: false } + )[0].declaration; + + testCases.set(`from a_index | stats by ${signatureStringWithAlias}`, []); + } + } + } +} + +function generateSortCommandTestsForEvalFunction( + definition: FunctionDefinition, + testCases: Map +) { + // should accept eval functions + const { + signatures: [firstSignature], + } = definition; + const fieldMapping = getFieldMapping(firstSignature.params); + const printedInvocation = getFunctionSignatures( + { ...definition, signatures: [{ ...firstSignature, params: fieldMapping }] }, + { withTypes: false } + )[0].declaration; + + testCases.set(`from a_index | sort ${printedInvocation}`, []); +} + +function generateSortCommandTestsForAggFunction( + definition: FunctionDefinition, + testCases: Map +) { + const { + name, + signatures: [firstSignature], + } = definition; + const fieldMapping = getFieldMapping(firstSignature.params); + const printedInvocation = getFunctionSignatures( + { ...definition, signatures: [{ ...firstSignature, params: fieldMapping }] }, + { withTypes: false } + )[0].declaration; + + testCases.set(`from a_index | sort ${printedInvocation}`, [ + `SORT does not support function ${name}`, + ]); +} + +const generateSortCommandTestsForGroupingFunction = generateSortCommandTestsForAggFunction; + +const fieldTypes = [ + 'number', + 'date', + 'boolean', + 'version', + 'ip', + 'string', + 'cartesian_point', + 'cartesian_shape', + 'geo_point', + 'geo_shape', +]; + +function prepareNestedFunction(fnSignature: FunctionDefinition): string { + return getFunctionSignatures( + { + ...fnSignature, + signatures: [ + { + ...fnSignature?.signatures[0]!, + params: getFieldMapping(fnSignature?.signatures[0]!.params), + }, + ], + }, + { withTypes: false } + )[0].declaration; +} + +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( + ({ name }) => name === 'to_cartesianpoint' +)!; + +const nestedFunctions = { + number: prepareNestedFunction(toInteger), + string: prepareNestedFunction(toStringSignature), + date: prepareNestedFunction(toDateSignature), + boolean: prepareNestedFunction(toBooleanSignature), + ip: prepareNestedFunction(toIpSignature), + geo_point: prepareNestedFunction(toGeoPointSignature), + cartesian_point: prepareNestedFunction(toCartesianPointSignature), +}; + +function getFieldName( + typeString: string, + { useNestedFunction, isStats }: { useNestedFunction: boolean; isStats: boolean } +) { + if (useNestedFunction && isStats) { + return prepareNestedFunction(toAvgSignature); + } + return useNestedFunction && typeString in nestedFunctions + ? nestedFunctions[typeString as keyof typeof nestedFunctions] + : `${camelCase(typeString)}Field`; +} + +const literals = { + chrono_literal: chronoLiterals[0].name, + time_literal: timeLiterals[0].name, +}; + +function getLiteralType(typeString: 'chrono_literal' | 'time_literal') { + if (typeString === 'chrono_literal') { + return literals[typeString]; + } + return `1 ${literals[typeString]}`; +} + +function getMultiValue(type: string) { + if (/string|any/.test(type)) { + return `["a", "b", "c"]`; + } + if (/number/.test(type)) { + return `[1, 2, 3]`; + } + return `[true, false]`; +} + +function tweakSignatureForRowCommand(signature: 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)")'); +} + +function getFieldMapping( + params: FunctionDefinition['signatures'][number]['params'], + { useNestedFunction, useLiterals }: { useNestedFunction: boolean; useLiterals: boolean } = { + useNestedFunction: false, + useLiterals: true, + } +) { + const literalValues = { + string: `"a"`, + number: '5', + date: 'now()', + }; + return params.map(({ name: _name, type, constantOnly, literalOptions, ...rest }) => { + const typeString: string = type; + if (fieldTypes.includes(typeString)) { + if (useLiterals && literalOptions) { + return { + name: `"${literalOptions[0]}"`, + type, + ...rest, + }; + } + + const fieldName = + constantOnly && typeString in literalValues + ? literalValues[typeString as keyof typeof literalValues]! + : getFieldName(typeString, { + useNestedFunction, + isStats: !useLiterals, + }); + return { + name: fieldName, + type, + ...rest, + }; + } + if (/literal$/.test(typeString) && useLiterals) { + return { + name: getLiteralType(typeString as 'chrono_literal' | 'time_literal'), + type, + ...rest, + }; + } + if (/\[\]$/.test(typeString)) { + return { + name: getMultiValue(typeString), + type, + ...rest, + }; + } + return { name: 'stringField', type, ...rest }; + }); +} + +function generateIncorrectlyTypedParameters( + name: string, + signatures: FunctionDefinition['signatures'], + currentParams: FunctionDefinition['signatures'][number]['params'], + values: { stringField: string; numberField: string; booleanField: string } +) { + const literalValues = { + string: `"a"`, + number: '5', + }; + const wrongFieldMapping = currentParams.map( + ({ name: _name, 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, + 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 }; + } + ); + + 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. + // + // Approximate this by finding the signature that best matches the INCORRECT field mapping + // + // This is not future-proof... + const misMatchesBySignature = signatures.map(({ params: fnParams }) => { + const typeMatches = fnParams.map(({ type }, i) => { + if (wrongFieldMapping[i].wrong) { + const typeFromIncorrectMapping = generatedFieldTypes[wrongFieldMapping[i].name]; + return type === typeFromIncorrectMapping; + } + return type === wrongFieldMapping[i].type; + }); + return typeMatches.filter((t) => !t).length; + })!; + const signatureToUse = + signatures[misMatchesBySignature.indexOf(Math.min(...misMatchesBySignature))]!; + + const expectedErrors = signatureToUse.params + .filter(({ constantOnly }) => !constantOnly) + .map(({ type }, i) => { + const fieldName = wrongFieldMapping[i].name; + if ( + fieldName === 'numberField' && + signatures.every(({ params: fnParams }) => fnParams[i].type !== 'string') + ) { + return; + } + return `Argument of [${name}] must be [${type}], found value [${fieldName}] type [${generatedFieldTypes[fieldName]}]`; + }) + .filter(nonNullable); + + return { wrongFieldMapping, expectedErrors }; +} + +/** + * This writes the test cases to the validation.test.ts file + * + * It will never overwrite existing test cases, only add new ones + * + * @param testCasesByFunction + */ +function writeTestsToFile(testCasesByFunction: Map>) { + const b = recast.types.builders; + const n = recast.types.namedTypes; + + const buildTestCase = (testQuery: string, expectedErrors: string[]) => { + return b.expressionStatement( + b.callExpression(b.identifier('testErrorsAndWarnings'), [ + b.stringLiteral(testQuery), + b.arrayExpression(expectedErrors.map((error) => b.stringLiteral(error))), + ]) + ); + }; + + const buildDescribeBlockForFunction = ( + _functionName: string, + testCases: Map + ) => { + const testCasesInCode = Array.from(testCases.entries()).map(([testQuery, expectedErrors]) => { + return buildTestCase(testQuery, expectedErrors); + }); + + return b.expressionStatement( + b.callExpression(b.identifier('describe'), [ + b.stringLiteral(_functionName), + b.arrowFunctionExpression([], b.blockStatement(testCasesInCode)), + ]) + ); + }; + + /** + * Returns the string contents of a node whether or not it's a StringLiteral or a TemplateLiteral + * @param node + * @returns + */ + function getValueFromStringOrTemplateLiteral(node: any): string { + if (n.StringLiteral.check(node)) { + return node.value; + } + + if (n.TemplateLiteral.check(node)) { + return node.quasis[0].value.raw; + } + + return ''; + } + + /** + * This function searches the AST for the describe block containing per-function tests + * @param ast + * @returns + */ + function findFunctionsDescribeBlock(ast: any): recast.types.namedTypes.BlockStatement { + let foundBlock: recast.types.namedTypes.CallExpression | null = null; + + const describeBlockIdentifierName = Object.keys({ FUNCTION_DESCRIBE_BLOCK_NAME })[0]; + + recast.visit(ast, { + visitCallExpression(path) { + const node = path.node; + if ( + n.Identifier.check(node.callee) && + node.callee.name === 'describe' && + n.Identifier.check(node.arguments[0]) && + node.arguments[0].name === describeBlockIdentifierName + ) { + foundBlock = node; + this.abort(); + } + this.traverse(path); + }, + }); + + if (!foundBlock) { + throw Error('couldn\'t find the "functions" describe block in the test file'); + } + + const functionsDescribeCallExpression = foundBlock as recast.types.namedTypes.CallExpression; + + if (!n.ArrowFunctionExpression.check(functionsDescribeCallExpression.arguments[1])) { + throw Error('Expected an arrow function expression'); + } + + if (!n.BlockStatement.check(functionsDescribeCallExpression.arguments[1].body)) { + throw Error('Expected a block statement'); + } + + return functionsDescribeCallExpression.arguments[1].body; + } + + const testFilePath = join(__dirname, '../src/validation/validation.test.ts'); + + const ast = recast.parse(readFileSync(testFilePath).toString(), { + parser: require('recast/parsers/typescript'), + }); + + const functionsDescribeBlock = findFunctionsDescribeBlock(ast); + + // check for existing describe blocks for functions and add any new + // test cases to them + for (const node of functionsDescribeBlock.body) { + if (!n.ExpressionStatement.check(node)) { + continue; + } + + if (!n.CallExpression.check(node.expression)) { + continue; + } + + if (!n.StringLiteral.check(node.expression.arguments[0])) { + continue; + } + + const functionName = node.expression.arguments[0].value; + + if (!testCasesByFunction.has(functionName)) { + // this will be a new describe block for a function that doesn't have any tests yet + continue; + } + + const generatedTestCasesForFunction = testCasesByFunction.get(functionName) as Map< + string, + string[] + >; + + if (!n.ArrowFunctionExpression.check(node.expression.arguments[1])) { + continue; + } + + if (!n.BlockStatement.check(node.expression.arguments[1].body)) { + continue; + } + + for (const existingTestCaseAST of node.expression.arguments[1].body.body) { + if (!n.ExpressionStatement.check(existingTestCaseAST)) { + continue; + } + + if (!n.CallExpression.check(existingTestCaseAST.expression)) { + continue; + } + + if (!n.Identifier.check(existingTestCaseAST.expression.callee)) { + continue; + } + + if (existingTestCaseAST.expression.callee.name !== 'testErrorsAndWarnings') { + continue; + } + + const testQuery = getValueFromStringOrTemplateLiteral( + existingTestCaseAST.expression.arguments[0] + ); + + if (!testQuery) { + continue; + } + + if (generatedTestCasesForFunction.has(testQuery)) { + // Remove the test case from the generated test cases to respect + // what is already there in the test file... we don't want to overwrite + // what already exists + generatedTestCasesForFunction.delete(testQuery); + } + } + + // add new testCases + for (const [testQuery, expectedErrors] of generatedTestCasesForFunction.entries()) { + node.expression.arguments[1].body.body.push(buildTestCase(testQuery, expectedErrors)); + } + + // remove the function from the map so we don't add a duplicate describe block + testCasesByFunction.delete(functionName); + } + + // Add new describe blocks for functions that don't have any tests yet + for (const [functionName, testCases] of testCasesByFunction) { + functionsDescribeBlock.body.push(buildDescribeBlockForFunction(functionName, testCases)); + } + + writeFileSync(testFilePath, recast.print(ast).code, 'utf-8'); +} + +main(); 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 2320f11d4a1ab..9b5d3b50b0a63 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 @@ -217,6 +217,14 @@ "error": [], "warning": [] }, + { + "query": "from `index`", + "error": [ + "SyntaxError: token recognition error at: '`'", + "SyntaxError: token recognition error at: '`'" + ], + "warning": [] + }, { "query": "from index, other_index", "error": [], @@ -692,15534 +700,14644 @@ "warning": [] }, { - "query": "row var = abs(5)", - "error": [], - "warning": [] - }, - { - "query": "row abs(5)", + "query": "row var = 5 > 0", "error": [], "warning": [] }, { - "query": "row var = abs(to_integer(\"a\"))", + "query": "row var = NOT 5 > 0", "error": [], "warning": [] }, { - "query": "row var = abs(\"a\")", + "query": "row var = (numberField > 0)", "error": [ - "Argument of [abs] must be [number], found value [\"a\"] type [string]" + "Unknown column [numberField]" ], "warning": [] }, { - "query": "row var = acos(5)", + "query": "row var = (NOT (5 > 0))", "error": [], "warning": [] }, { - "query": "row acos(5)", + "query": "row var = to_ip(\"127.0.0.1\") > to_ip(\"127.0.0.1\")", "error": [], "warning": [] }, { - "query": "row var = acos(to_integer(\"a\"))", + "query": "row var = now() > now()", "error": [], "warning": [] }, { - "query": "row var = acos(\"a\")", + "query": "row var = false > false", "error": [ - "Argument of [acos] must be [number], found value [\"a\"] type [string]" + "Argument of [>] must be [number], found value [false] type [boolean]", + "Argument of [>] must be [number], found value [false] type [boolean]" ], "warning": [] }, { - "query": "row var = asin(5)", - "error": [], - "warning": [] - }, - { - "query": "row asin(5)", - "error": [], - "warning": [] - }, - { - "query": "row var = asin(to_integer(\"a\"))", + "query": "row var = now() > \"2022\"", "error": [], "warning": [] }, { - "query": "row var = asin(\"a\")", - "error": [ - "Argument of [asin] must be [number], found value [\"a\"] type [string]" - ], - "warning": [] - }, - { - "query": "row var = atan(5)", + "query": "row var = \"2022\" > now()", "error": [], "warning": [] }, { - "query": "row atan(5)", + "query": "row var = 5 >= 0", "error": [], "warning": [] }, { - "query": "row var = atan(to_integer(\"a\"))", + "query": "row var = NOT 5 >= 0", "error": [], "warning": [] }, { - "query": "row var = atan(\"a\")", + "query": "row var = (numberField >= 0)", "error": [ - "Argument of [atan] must be [number], found value [\"a\"] type [string]" + "Unknown column [numberField]" ], "warning": [] }, { - "query": "row var = atan2(5, 5)", + "query": "row var = (NOT (5 >= 0))", "error": [], "warning": [] }, { - "query": "row atan2(5, 5)", + "query": "row var = to_ip(\"127.0.0.1\") >= to_ip(\"127.0.0.1\")", "error": [], "warning": [] }, { - "query": "row var = atan2(to_integer(\"a\"), to_integer(\"a\"))", + "query": "row var = now() >= now()", "error": [], "warning": [] }, { - "query": "row var = atan2(\"a\", \"a\")", + "query": "row var = false >= false", "error": [ - "Argument of [atan2] must be [number], found value [\"a\"] type [string]", - "Argument of [atan2] must be [number], found value [\"a\"] type [string]" + "Argument of [>=] must be [number], found value [false] type [boolean]", + "Argument of [>=] must be [number], found value [false] type [boolean]" ], "warning": [] }, { - "query": "row var = case(true, \"a\")", - "error": [], - "warning": [] - }, - { - "query": "row case(true, \"a\")", + "query": "row var = now() >= \"2022\"", "error": [], "warning": [] }, { - "query": "row var = ceil(5)", + "query": "row var = \"2022\" >= now()", "error": [], "warning": [] }, { - "query": "row ceil(5)", + "query": "row var = 5 < 0", "error": [], "warning": [] }, { - "query": "row var = ceil(to_integer(\"a\"))", + "query": "row var = NOT 5 < 0", "error": [], "warning": [] }, { - "query": "row var = ceil(\"a\")", + "query": "row var = (numberField < 0)", "error": [ - "Argument of [ceil] must be [number], found value [\"a\"] type [string]" + "Unknown column [numberField]" ], "warning": [] }, { - "query": "row var = cidr_match(to_ip(\"127.0.0.1\"), \"a\")", + "query": "row var = (NOT (5 < 0))", "error": [], "warning": [] }, { - "query": "row cidr_match(to_ip(\"127.0.0.1\"), \"a\")", + "query": "row var = to_ip(\"127.0.0.1\") < to_ip(\"127.0.0.1\")", "error": [], "warning": [] }, { - "query": "row var = cidr_match(to_ip(\"a\"), to_string(\"a\"))", + "query": "row var = now() < now()", "error": [], "warning": [] }, { - "query": "row var = cidr_match(\"a\", 5)", + "query": "row var = false < false", "error": [ - "Argument of [cidr_match] must be [ip], found value [\"a\"] type [string]", - "Argument of [cidr_match] must be [string], found value [5] type [number]" + "Argument of [<] must be [number], found value [false] type [boolean]", + "Argument of [<] must be [number], found value [false] type [boolean]" ], "warning": [] }, { - "query": "row var = coalesce(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row coalesce(\"a\")", + "query": "row var = now() < \"2022\"", "error": [], "warning": [] }, { - "query": "row var = concat(\"a\", \"a\")", + "query": "row var = \"2022\" < now()", "error": [], "warning": [] }, { - "query": "row concat(\"a\", \"a\")", + "query": "row var = 5 <= 0", "error": [], "warning": [] }, { - "query": "row var = concat(to_string(\"a\"), to_string(\"a\"))", + "query": "row var = NOT 5 <= 0", "error": [], "warning": [] }, { - "query": "row var = concat(5, 5)", + "query": "row var = (numberField <= 0)", "error": [ - "Argument of [concat] must be [string], found value [5] type [number]" + "Unknown column [numberField]" ], "warning": [] }, { - "query": "row var = cos(5)", + "query": "row var = (NOT (5 <= 0))", "error": [], "warning": [] }, { - "query": "row cos(5)", + "query": "row var = to_ip(\"127.0.0.1\") <= to_ip(\"127.0.0.1\")", "error": [], "warning": [] }, { - "query": "row var = cos(to_integer(\"a\"))", + "query": "row var = now() <= now()", "error": [], "warning": [] }, { - "query": "row var = cos(\"a\")", + "query": "row var = false <= false", "error": [ - "Argument of [cos] must be [number], found value [\"a\"] type [string]" + "Argument of [<=] must be [number], found value [false] type [boolean]", + "Argument of [<=] must be [number], found value [false] type [boolean]" ], "warning": [] }, { - "query": "row var = cosh(5)", + "query": "row var = now() <= \"2022\"", "error": [], "warning": [] }, { - "query": "row cosh(5)", + "query": "row var = \"2022\" <= now()", "error": [], "warning": [] }, { - "query": "row var = cosh(to_integer(\"a\"))", + "query": "row var = 5 == 0", "error": [], "warning": [] }, { - "query": "row var = cosh(\"a\")", + "query": "row var = NOT 5 == 0", + "error": [], + "warning": [] + }, + { + "query": "row var = (numberField == 0)", "error": [ - "Argument of [cosh] must be [number], found value [\"a\"] type [string]" + "Unknown column [numberField]" ], "warning": [] }, { - "query": "row var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", now())", + "query": "row var = (NOT (5 == 0))", "error": [], "warning": [] }, { - "query": "row date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", now())", + "query": "row var = to_ip(\"127.0.0.1\") == to_ip(\"127.0.0.1\")", "error": [], "warning": [] }, { - "query": "row var = date_format(now(), \"a\")", + "query": "row var = now() == now()", "error": [], "warning": [] }, { - "query": "row date_format(now(), \"a\")", + "query": "row var = false == false", "error": [], "warning": [] }, { - "query": "row var = date_parse(\"a\", \"a\")", + "query": "row var = now() == \"2022\"", "error": [], "warning": [] }, { - "query": "row date_parse(\"a\", \"a\")", + "query": "row var = \"2022\" == now()", "error": [], "warning": [] }, { - "query": "row var = date_parse(to_string(\"a\"), to_string(\"a\"))", + "query": "row var = 5 != 0", "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 var = NOT 5 != 0", + "error": [], "warning": [] }, { - "query": "row var = date_trunc(1 year, now())", - "error": [], + "query": "row var = (numberField != 0)", + "error": [ + "Unknown column [numberField]" + ], "warning": [] }, { - "query": "row date_trunc(1 year, now())", + "query": "row var = (NOT (5 != 0))", "error": [], "warning": [] }, { - "query": "row var = e()", + "query": "row var = to_ip(\"127.0.0.1\") != to_ip(\"127.0.0.1\")", "error": [], "warning": [] }, { - "query": "row e()", + "query": "row var = now() != now()", "error": [], "warning": [] }, { - "query": "row var = e()", + "query": "row var = false != false", "error": [], "warning": [] }, { - "query": "row var = e()", + "query": "row var = now() != \"2022\"", "error": [], "warning": [] }, { - "query": "row var = ends_with(\"a\", \"a\")", + "query": "row var = \"2022\" != now()", "error": [], "warning": [] }, { - "query": "row ends_with(\"a\", \"a\")", + "query": "row var = 1 + 1", "error": [], "warning": [] }, { - "query": "row var = ends_with(to_string(\"a\"), to_string(\"a\"))", + "query": "row var = (5 + 1)", "error": [], "warning": [] }, { - "query": "row var = ends_with(5, 5)", + "query": "row var = now() + now()", "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]" + "Argument of [+] must be [time_literal], found value [now()] type [date]" ], "warning": [] }, { - "query": "row var = floor(5)", - "error": [], - "warning": [] - }, - { - "query": "row floor(5)", + "query": "row var = 1 - 1", "error": [], "warning": [] }, { - "query": "row var = floor(to_integer(\"a\"))", + "query": "row var = (5 - 1)", "error": [], "warning": [] }, { - "query": "row var = floor(\"a\")", + "query": "row var = now() - now()", "error": [ - "Argument of [floor] must be [number], found value [\"a\"] type [string]" + "Argument of [-] must be [time_literal], found value [now()] type [date]" ], "warning": [] }, { - "query": "row var = greatest(\"a\")", + "query": "row var = 1 * 1", "error": [], "warning": [] }, { - "query": "row greatest(\"a\")", + "query": "row var = (5 * 1)", "error": [], "warning": [] }, { - "query": "row var = least(\"a\")", - "error": [], + "query": "row var = now() * now()", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [now()] type [date]" + ], "warning": [] }, { - "query": "row least(\"a\")", + "query": "row var = 1 / 1", "error": [], "warning": [] }, { - "query": "row var = left(\"a\", 5)", + "query": "row var = (5 / 1)", "error": [], "warning": [] }, { - "query": "row left(\"a\", 5)", + "query": "row var = now() / now()", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [now()] type [date]" + ], + "warning": [] + }, + { + "query": "row var = 1 % 1", "error": [], "warning": [] }, { - "query": "row var = left(to_string(\"a\"), to_integer(\"a\"))", + "query": "row var = (5 % 1)", "error": [], "warning": [] }, { - "query": "row var = left(5, \"a\")", + "query": "row var = now() % now()", "error": [ - "Argument of [left] must be [string], found value [5] type [number]", - "Argument of [left] must be [number], found value [\"a\"] type [string]" + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [now()] type [date]" ], "warning": [] }, { - "query": "row var = length(\"a\")", + "query": "row var = \"a\" like \"?a\"", "error": [], "warning": [] }, { - "query": "row length(\"a\")", + "query": "row var = \"a\" NOT like \"?a\"", "error": [], "warning": [] }, { - "query": "row var = length(to_string(\"a\"))", + "query": "row var = NOT \"a\" like \"?a\"", "error": [], "warning": [] }, { - "query": "row var = length(5)", - "error": [ - "Argument of [length] must be [string], found value [5] type [number]" - ], + "query": "row var = NOT \"a\" NOT like \"?a\"", + "error": [], "warning": [] }, { - "query": "row var = log(5, 5)", - "error": [], + "query": "row var = 5 like \"?a\"", + "error": [ + "Argument of [like] must be [string], found value [5] type [number]" + ], "warning": [] }, { - "query": "row log(5, 5)", - "error": [], + "query": "row var = 5 NOT like \"?a\"", + "error": [ + "Argument of [not_like] must be [string], found value [5] type [number]" + ], "warning": [] }, { - "query": "row var = log(to_integer(\"a\"), to_integer(\"a\"))", - "error": [], + "query": "row var = NOT 5 like \"?a\"", + "error": [ + "Argument of [like] must be [string], found value [5] type [number]" + ], "warning": [] }, { - "query": "row var = log(\"a\", \"a\")", + "query": "row var = NOT 5 NOT like \"?a\"", "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 [not_like] must be [string], found value [5] type [number]" ], "warning": [] }, { - "query": "row var = log10(5)", + "query": "row var = \"a\" rlike \"?a\"", "error": [], "warning": [] }, { - "query": "row log10(5)", + "query": "row var = \"a\" NOT rlike \"?a\"", "error": [], "warning": [] }, { - "query": "row var = log10(to_integer(\"a\"))", + "query": "row var = NOT \"a\" rlike \"?a\"", "error": [], "warning": [] }, { - "query": "row var = log10(\"a\")", - "error": [ - "Argument of [log10] must be [number], found value [\"a\"] type [string]" - ], + "query": "row var = NOT \"a\" NOT rlike \"?a\"", + "error": [], "warning": [] }, { - "query": "row var = ltrim(\"a\")", - "error": [], + "query": "row var = 5 rlike \"?a\"", + "error": [ + "Argument of [rlike] must be [string], found value [5] type [number]" + ], "warning": [] }, { - "query": "row ltrim(\"a\")", - "error": [], + "query": "row var = 5 NOT rlike \"?a\"", + "error": [ + "Argument of [not_rlike] must be [string], found value [5] type [number]" + ], "warning": [] }, { - "query": "row var = ltrim(to_string(\"a\"))", - "error": [], + "query": "row var = NOT 5 rlike \"?a\"", + "error": [ + "Argument of [rlike] must be [string], found value [5] type [number]" + ], "warning": [] }, { - "query": "row var = ltrim(5)", + "query": "row var = NOT 5 NOT rlike \"?a\"", "error": [ - "Argument of [ltrim] must be [string], found value [5] type [number]" + "Argument of [not_rlike] must be [string], found value [5] type [number]" ], "warning": [] }, { - "query": "row var = mv_avg(5)", + "query": "row var = mv_sort([\"a\", \"b\"], \"bogus\")", "error": [], - "warning": [] + "warning": [ + "Invalid option [\"bogus\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." + ] }, { - "query": "row mv_avg(5)", + "query": "row var = mv_sort([\"a\", \"b\"], \"ASC\")", "error": [], "warning": [] }, { - "query": "row var = mv_avg(to_integer(\"a\"))", + "query": "row var = mv_sort([\"a\", \"b\"], \"DESC\")", "error": [], "warning": [] }, { - "query": "row var = mv_avg(\"a\")", + "query": "row 1 anno", "error": [ - "Argument of [mv_avg] must be [number], found value [\"a\"] type [string]" + "ROW does not support [date_period] in expression [1 anno]" ], "warning": [] }, { - "query": "row var = mv_concat(\"a\", \"a\")", - "error": [], + "query": "row var = 1 anno", + "error": [ + "Unexpected time interval qualifier: 'anno'" + ], "warning": [] }, { - "query": "row mv_concat(\"a\", \"a\")", - "error": [], + "query": "row now() + 1 anno", + "error": [ + "Unexpected time interval qualifier: 'anno'" + ], "warning": [] }, { - "query": "row var = mv_concat(to_string(\"a\"), to_string(\"a\"))", - "error": [], + "query": "row 1 year", + "error": [ + "ROW does not support [date_period] in expression [1 year]" + ], "warning": [] }, { - "query": "row var = mv_concat(5, 5)", + "query": "row 1 year", "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]" + "ROW does not support [date_period] in expression [1 year]" ], "warning": [] }, { - "query": "row var = mv_count(\"a\")", + "query": "row var = now() - 1 year", "error": [], "warning": [] }, { - "query": "row mv_count(\"a\")", + "query": "row var = now() - 1 YEAR", "error": [], "warning": [] }, { - "query": "row var = mv_dedupe(\"a\")", + "query": "row var = now() - 1 Year", "error": [], "warning": [] }, { - "query": "row mv_dedupe(\"a\")", + "query": "row var = now() + 1 year", "error": [], "warning": [] }, { - "query": "row var = mv_first(\"a\")", - "error": [], + "query": "row 1 year + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 year] type [duration]" + ], "warning": [] }, { - "query": "row mv_first(\"a\")", - "error": [], + "query": "row var = now() * 1 year", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 year] type [duration]" + ], "warning": [] }, { - "query": "row var = mv_last(\"a\")", - "error": [], + "query": "row var = now() / 1 year", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 year] type [duration]" + ], "warning": [] }, { - "query": "row mv_last(\"a\")", - "error": [], + "query": "row var = now() % 1 year", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 year] type [duration]" + ], "warning": [] }, { - "query": "row var = mv_max(\"a\")", - "error": [], + "query": "row 1 years", + "error": [ + "ROW does not support [date_period] in expression [1 years]" + ], "warning": [] }, { - "query": "row mv_max(\"a\")", + "query": "row 1 years", + "error": [ + "ROW does not support [date_period] in expression [1 years]" + ], + "warning": [] + }, + { + "query": "row var = now() - 1 years", "error": [], "warning": [] }, { - "query": "row var = mv_median(5)", + "query": "row var = now() - 1 YEARS", "error": [], "warning": [] }, { - "query": "row mv_median(5)", + "query": "row var = now() - 1 Years", "error": [], "warning": [] }, { - "query": "row var = mv_median(to_integer(\"a\"))", + "query": "row var = now() + 1 years", "error": [], "warning": [] }, { - "query": "row var = mv_median(\"a\")", + "query": "row 1 years + 1 year", "error": [ - "Argument of [mv_median] must be [number], found value [\"a\"] type [string]" + "Argument of [+] must be [date], found value [1 years] type [duration]" ], "warning": [] }, { - "query": "row var = mv_min(\"a\")", - "error": [], + "query": "row var = now() * 1 years", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 years] type [duration]" + ], "warning": [] }, { - "query": "row mv_min(\"a\")", - "error": [], + "query": "row var = now() / 1 years", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 years] type [duration]" + ], "warning": [] }, { - "query": "row var = mv_slice(\"a\", 5, 5)", - "error": [], + "query": "row var = now() % 1 years", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 years] type [duration]" + ], "warning": [] }, { - "query": "row mv_slice(\"a\", 5, 5)", - "error": [], + "query": "row 1 month", + "error": [ + "ROW does not support [date_period] in expression [1 month]" + ], "warning": [] }, { - "query": "row var = mv_sort(\"a\", \"asc\")", - "error": [], + "query": "row 1 month", + "error": [ + "ROW does not support [date_period] in expression [1 month]" + ], "warning": [] }, { - "query": "row mv_sort(\"a\", \"asc\")", + "query": "row var = now() - 1 month", "error": [], "warning": [] }, { - "query": "row var = mv_sum(5)", + "query": "row var = now() - 1 MONTH", "error": [], "warning": [] }, { - "query": "row mv_sum(5)", + "query": "row var = now() - 1 Month", "error": [], "warning": [] }, { - "query": "row var = mv_sum(to_integer(\"a\"))", + "query": "row var = now() + 1 month", "error": [], "warning": [] }, { - "query": "row var = mv_sum(\"a\")", + "query": "row 1 month + 1 year", "error": [ - "Argument of [mv_sum] must be [number], found value [\"a\"] type [string]" + "Argument of [+] must be [date], found value [1 month] type [duration]" ], "warning": [] }, { - "query": "row var = mv_zip(\"a\", \"a\", \"a\")", - "error": [], + "query": "row var = now() * 1 month", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 month] type [duration]" + ], "warning": [] }, { - "query": "row mv_zip(\"a\", \"a\", \"a\")", - "error": [], + "query": "row var = now() / 1 month", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 month] type [duration]" + ], "warning": [] }, { - "query": "row var = mv_zip(to_string(\"a\"), to_string(\"a\"), to_string(\"a\"))", - "error": [], + "query": "row var = now() % 1 month", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 month] type [duration]" + ], "warning": [] }, { - "query": "row var = mv_zip(5, 5, 5)", + "query": "row 1 months", "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]" + "ROW does not support [date_period] in expression [1 months]" ], "warning": [] }, { - "query": "row var = now()", - "error": [], + "query": "row 1 months", + "error": [ + "ROW does not support [date_period] in expression [1 months]" + ], "warning": [] }, { - "query": "row now()", + "query": "row var = now() - 1 months", "error": [], "warning": [] }, { - "query": "row var = now()", + "query": "row var = now() - 1 MONTHS", "error": [], "warning": [] }, { - "query": "row var = now()", + "query": "row var = now() - 1 Months", "error": [], "warning": [] }, { - "query": "row var = pi()", + "query": "row var = now() + 1 months", "error": [], "warning": [] }, { - "query": "row pi()", - "error": [], + "query": "row 1 months + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 months] type [duration]" + ], "warning": [] }, { - "query": "row var = pi()", - "error": [], + "query": "row var = now() * 1 months", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 months] type [duration]" + ], "warning": [] }, { - "query": "row var = pi()", - "error": [], + "query": "row var = now() / 1 months", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 months] type [duration]" + ], "warning": [] }, { - "query": "row var = pow(5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row pow(5, 5)", - "error": [], + "query": "row var = now() % 1 months", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 months] type [duration]" + ], "warning": [] }, { - "query": "row var = pow(to_integer(\"a\"), to_integer(\"a\"))", - "error": [], + "query": "row 1 week", + "error": [ + "ROW does not support [date_period] in expression [1 week]" + ], "warning": [] }, { - "query": "row var = pow(\"a\", \"a\")", + "query": "row 1 week", "error": [ - "Argument of [pow] must be [number], found value [\"a\"] type [string]", - "Argument of [pow] must be [number], found value [\"a\"] type [string]" + "ROW does not support [date_period] in expression [1 week]" ], "warning": [] }, { - "query": "row var = replace(\"a\", \"a\", \"a\")", + "query": "row var = now() - 1 week", "error": [], "warning": [] }, { - "query": "row replace(\"a\", \"a\", \"a\")", + "query": "row var = now() - 1 WEEK", "error": [], "warning": [] }, { - "query": "row var = replace(to_string(\"a\"), to_string(\"a\"), to_string(\"a\"))", + "query": "row var = now() - 1 Week", "error": [], "warning": [] }, { - "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]" - ], + "query": "row var = now() + 1 week", + "error": [], "warning": [] }, { - "query": "row var = right(\"a\", 5)", - "error": [], + "query": "row 1 week + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 week] type [duration]" + ], "warning": [] }, { - "query": "row right(\"a\", 5)", - "error": [], + "query": "row var = now() * 1 week", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 week] type [duration]" + ], "warning": [] }, { - "query": "row var = right(to_string(\"a\"), to_integer(\"a\"))", - "error": [], + "query": "row var = now() / 1 week", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 week] type [duration]" + ], "warning": [] }, { - "query": "row var = right(5, \"a\")", + "query": "row var = now() % 1 week", "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 [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 week] type [duration]" ], "warning": [] }, { - "query": "row var = round(5, 5)", - "error": [], + "query": "row 1 weeks", + "error": [ + "ROW does not support [date_period] in expression [1 weeks]" + ], "warning": [] }, { - "query": "row round(5, 5)", - "error": [], + "query": "row 1 weeks", + "error": [ + "ROW does not support [date_period] in expression [1 weeks]" + ], "warning": [] }, { - "query": "row var = round(to_integer(\"a\"), to_integer(\"a\"))", + "query": "row var = now() - 1 weeks", "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": "row var = now() - 1 WEEKS", + "error": [], "warning": [] }, { - "query": "row var = rtrim(\"a\")", + "query": "row var = now() - 1 Weeks", "error": [], "warning": [] }, { - "query": "row rtrim(\"a\")", + "query": "row var = now() + 1 weeks", "error": [], "warning": [] }, { - "query": "row var = rtrim(to_string(\"a\"))", - "error": [], + "query": "row 1 weeks + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 weeks] type [duration]" + ], "warning": [] }, { - "query": "row var = rtrim(5)", + "query": "row var = now() * 1 weeks", "error": [ - "Argument of [rtrim] must be [string], found value [5] type [number]" + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 weeks] type [duration]" ], "warning": [] }, { - "query": "row var = signum(5)", - "error": [], + "query": "row var = now() / 1 weeks", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 weeks] type [duration]" + ], "warning": [] }, { - "query": "row signum(5)", - "error": [], + "query": "row var = now() % 1 weeks", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 weeks] type [duration]" + ], "warning": [] }, { - "query": "row var = signum(to_integer(\"a\"))", - "error": [], + "query": "row 1 day", + "error": [ + "ROW does not support [date_period] in expression [1 day]" + ], "warning": [] }, { - "query": "row var = signum(\"a\")", + "query": "row 1 day", "error": [ - "Argument of [signum] must be [number], found value [\"a\"] type [string]" + "ROW does not support [date_period] in expression [1 day]" ], "warning": [] }, { - "query": "row var = sin(5)", + "query": "row var = now() - 1 day", "error": [], "warning": [] }, { - "query": "row sin(5)", + "query": "row var = now() - 1 DAY", "error": [], "warning": [] }, { - "query": "row var = sin(to_integer(\"a\"))", + "query": "row var = now() - 1 Day", "error": [], "warning": [] }, { - "query": "row var = sin(\"a\")", - "error": [ - "Argument of [sin] must be [number], found value [\"a\"] type [string]" - ], + "query": "row var = now() + 1 day", + "error": [], "warning": [] }, { - "query": "row var = sinh(5)", - "error": [], + "query": "row 1 day + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 day] type [duration]" + ], "warning": [] }, { - "query": "row sinh(5)", - "error": [], + "query": "row var = now() * 1 day", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 day] type [duration]" + ], "warning": [] }, { - "query": "row var = sinh(to_integer(\"a\"))", - "error": [], + "query": "row var = now() / 1 day", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 day] type [duration]" + ], "warning": [] }, { - "query": "row var = sinh(\"a\")", + "query": "row var = now() % 1 day", "error": [ - "Argument of [sinh] must be [number], found value [\"a\"] type [string]" + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 day] type [duration]" ], "warning": [] }, { - "query": "row var = split(\"a\", \"a\")", - "error": [], + "query": "row 1 days", + "error": [ + "ROW does not support [date_period] in expression [1 days]" + ], "warning": [] }, { - "query": "row split(\"a\", \"a\")", - "error": [], + "query": "row 1 days", + "error": [ + "ROW does not support [date_period] in expression [1 days]" + ], "warning": [] }, { - "query": "row var = split(to_string(\"a\"), to_string(\"a\"))", + "query": "row var = now() - 1 days", "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": "row var = now() - 1 DAYS", + "error": [], "warning": [] }, { - "query": "row var = sqrt(5)", + "query": "row var = now() - 1 Days", "error": [], "warning": [] }, { - "query": "row sqrt(5)", + "query": "row var = now() + 1 days", "error": [], "warning": [] }, { - "query": "row var = sqrt(to_integer(\"a\"))", - "error": [], + "query": "row 1 days + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 days] type [duration]" + ], "warning": [] }, { - "query": "row var = sqrt(\"a\")", + "query": "row var = now() * 1 days", "error": [ - "Argument of [sqrt] must be [number], found value [\"a\"] type [string]" + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 days] type [duration]" ], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() / 1 days", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 days] type [duration]" + ], "warning": [] }, { - "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() % 1 days", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 days] type [duration]" + ], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"a\"), to_geopoint(\"a\"))", - "error": [], + "query": "row 1 hour", + "error": [ + "ROW does not support [date_period] in expression [1 hour]" + ], "warning": [] }, { - "query": "row var = st_contains(\"a\", \"a\")", + "query": "row 1 hour", "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]" + "ROW does not support [date_period] in expression [1 hour]" ], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = now() - 1 hour", "error": [], "warning": [] }, { - "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = now() - 1 HOUR", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = now() - 1 Hour", "error": [], "warning": [] }, { - "query": "row var = st_contains(\"a\", \"a\")", - "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]" - ], + "query": "row var = now() + 1 hour", + "error": [], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "row 1 hour + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 hour] type [duration]" + ], "warning": [] }, { - "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() * 1 hour", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 hour] type [duration]" + ], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", - "error": [], + "query": "row var = now() / 1 hour", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 hour] type [duration]" + ], "warning": [] }, { - "query": "row var = st_contains(\"a\", \"a\")", + "query": "row var = now() % 1 hour", "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 [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 hour] type [duration]" ], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "row 1 hours", + "error": [ + "ROW does not support [date_period] in expression [1 hours]" + ], "warning": [] }, { - "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "row 1 hours", + "error": [ + "ROW does not support [date_period] in expression [1 hours]" + ], "warning": [] }, { - "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = now() - 1 hours", "error": [], "warning": [] }, { - "query": "row var = st_contains(\"a\", \"a\")", - "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]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = now() - 1 HOURS", "error": [], "warning": [] }, { - "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = now() - 1 Hours", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "query": "row var = now() + 1 hours", "error": [], "warning": [] }, { - "query": "row var = st_contains(\"a\", \"a\")", + "query": "row 1 hours + 1 year", "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 [+] must be [date], found value [1 hours] type [duration]" ], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() * 1 hours", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 hours] type [duration]" + ], "warning": [] }, { - "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() / 1 hours", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 hours] type [duration]" + ], "warning": [] }, { - "query": "row var = st_contains(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() % 1 hours", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 hours] type [duration]" + ], "warning": [] }, { - "query": "row var = st_contains(\"a\", \"a\")", + "query": "row 1 minute", "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]" + "ROW does not support [date_period] in expression [1 minute]" ], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "row 1 minute", + "error": [ + "ROW does not support [date_period] in expression [1 minute]" + ], "warning": [] }, { - "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = now() - 1 minute", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "row var = now() - 1 MINUTE", "error": [], "warning": [] }, { - "query": "row var = st_contains(\"a\", \"a\")", - "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]" - ], - "warning": [] - }, - { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = now() - 1 Minute", "error": [], "warning": [] }, { - "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = now() + 1 minute", "error": [], "warning": [] }, { - "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "row 1 minute + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 minute] type [duration]" + ], "warning": [] }, { - "query": "row var = st_contains(\"a\", \"a\")", + "query": "row var = now() * 1 minute", "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 [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() / 1 minute", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 minute] type [duration]" + ], "warning": [] }, { - "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() % 1 minute", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 minute] type [duration]" + ], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"a\"), to_geopoint(\"a\"))", - "error": [], + "query": "row 1 minutes", + "error": [ + "ROW does not support [date_period] in expression [1 minutes]" + ], "warning": [] }, { - "query": "row var = st_disjoint(\"a\", \"a\")", + "query": "row 1 minutes", "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]" + "ROW does not support [date_period] in expression [1 minutes]" ], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = now() - 1 minutes", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = now() - 1 MINUTES", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = now() - 1 Minutes", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(\"a\", \"a\")", - "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]" - ], - "warning": [] - }, - { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "row var = now() + 1 minutes", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", - "error": [], + "query": "row 1 minutes + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 minutes] type [duration]" + ], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", - "error": [], + "query": "row var = now() * 1 minutes", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 minutes] type [duration]" + ], "warning": [] }, { - "query": "row var = st_disjoint(\"a\", \"a\")", + "query": "row var = now() / 1 minutes", "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 [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() % 1 minutes", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 minutes] type [duration]" + ], "warning": [] }, { - "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "row 1 second", + "error": [ + "ROW does not support [date_period] in expression [1 second]" + ], "warning": [] }, { - "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "row 1 second", + "error": [ + "ROW does not support [date_period] in expression [1 second]" + ], "warning": [] }, { - "query": "row var = st_disjoint(\"a\", \"a\")", - "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]" - ], + "query": "row var = now() - 1 second", + "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = now() - 1 SECOND", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = now() - 1 Second", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "query": "row var = now() + 1 second", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(\"a\", \"a\")", + "query": "row 1 second + 1 year", "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 [+] must be [date], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() * 1 second", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 second] type [duration]" + ], "warning": [] }, { - "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() / 1 second", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 second] type [duration]" + ], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() % 1 second", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 second] type [duration]" + ], "warning": [] }, { - "query": "row var = st_disjoint(\"a\", \"a\")", + "query": "row 1 seconds", "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]" + "ROW does not support [date_period] in expression [1 seconds]" ], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "row 1 seconds", + "error": [ + "ROW does not support [date_period] in expression [1 seconds]" + ], "warning": [] }, { - "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = now() - 1 seconds", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "query": "row var = now() - 1 SECONDS", "error": [], "warning": [] }, { - "query": "row var = st_disjoint(\"a\", \"a\")", - "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]" - ], + "query": "row var = now() - 1 Seconds", + "error": [], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "query": "row var = now() + 1 seconds", "error": [], "warning": [] }, { - "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "row 1 seconds + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 seconds] type [duration]" + ], "warning": [] }, { - "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() * 1 seconds", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 seconds] type [duration]" + ], "warning": [] }, { - "query": "row var = st_disjoint(\"a\", \"a\")", + "query": "row var = now() / 1 seconds", "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 [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 seconds] type [duration]" ], "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\")", + "query": "row var = now() % 1 seconds", "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 [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 seconds] type [duration]" ], "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(\"a\", \"a\")", + "query": "row 1 millisecond", "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]" + "ROW does not support [date_period] in expression [1 millisecond]" ], "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(\"a\", \"a\")", + "query": "row 1 millisecond", "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]" + "ROW does not support [date_period] in expression [1 millisecond]" ], "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_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = now() - 1 millisecond", "error": [], "warning": [] }, { - "query": "row var = st_intersects(\"a\", \"a\")", - "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]" - ], - "warning": [] - }, - { - "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = now() - 1 MILLISECOND", "error": [], "warning": [] }, { - "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "row var = now() - 1 Millisecond", "error": [], "warning": [] }, { - "query": "row var = st_intersects(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "query": "row var = now() + 1 millisecond", "error": [], "warning": [] }, { - "query": "row var = st_intersects(\"a\", \"a\")", + "query": "row 1 millisecond + 1 year", "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 [+] must be [date], found value [1 millisecond] type [duration]" ], "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(\"a\", \"a\")", + "query": "row var = now() * 1 millisecond", "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 [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 millisecond] type [duration]" ], "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(\"a\", \"a\")", + "query": "row var = now() / 1 millisecond", "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 [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 millisecond] type [duration]" ], "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": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "error": [], - "warning": [] - }, - { - "query": "row var = st_intersects(\"a\", \"a\")", + "query": "row var = now() % 1 millisecond", "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 [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 millisecond] type [duration]" ], "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\")", + "query": "row 1 milliseconds", "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]" + "ROW does not support [date_period] in expression [1 milliseconds]" ], "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": [], + "query": "row 1 milliseconds", + "error": [ + "ROW does not support [date_period] in expression [1 milliseconds]" + ], "warning": [] }, { - "query": "row var = st_within(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "query": "row var = now() - 1 milliseconds", "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]" - ], - "warning": [] - }, - { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "row var = now() - 1 MILLISECONDS", "error": [], "warning": [] }, { - "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "query": "row var = now() - 1 Milliseconds", "error": [], "warning": [] }, { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", + "query": "row var = now() + 1 milliseconds", "error": [], "warning": [] }, { - "query": "row var = st_within(\"a\", \"a\")", + "query": "row 1 milliseconds + 1 year", "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]" + "Argument of [+] must be [date], found value [1 milliseconds] type [duration]" ], "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": [], + "query": "row var = now() * 1 milliseconds", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 milliseconds] type [duration]" + ], "warning": [] }, { - "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", - "error": [], + "query": "row var = now() / 1 milliseconds", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 milliseconds] type [duration]" + ], "warning": [] }, { - "query": "row var = st_within(\"a\", \"a\")", + "query": "row var = now() % 1 milliseconds", "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]" + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 milliseconds] type [duration]" ], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", - "error": [], + "query": "meta", + "error": [ + "SyntaxError: missing 'functions' at ''" + ], "warning": [] }, { - "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "query": "meta functions", "error": [], "warning": [] }, { - "query": "row var = st_within(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", - "error": [], + "query": "meta functions()", + "error": [ + "SyntaxError: token recognition error at: '('", + "SyntaxError: token recognition error at: ')'" + ], "warning": [] }, { - "query": "row var = st_within(\"a\", \"a\")", + "query": "meta functions blah", "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]" + "SyntaxError: token recognition error at: 'b'", + "SyntaxError: token recognition error at: 'l'", + "SyntaxError: token recognition error at: 'a'", + "SyntaxError: token recognition error at: 'h'" ], "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(\"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]" - ], - "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(\"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]" - ], - "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": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", - "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]" - ], - "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 [geo_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": "row var = st_x(\"a\")", - "error": [ - "Argument of [st_x] must be [geo_point], found value [\"a\"] type [string]" - ], - "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 [geo_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": "row var = st_y(\"a\")", - "error": [ - "Argument of [st_y] must be [geo_point], found value [\"a\"] type [string]" - ], - "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": "row var = substring(\"a\", 5, 5)", - "error": [], - "warning": [] - }, - { - "query": "row substring(\"a\", 5, 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": "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": "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": "row var = tau()", - "error": [], - "warning": [] - }, - { - "query": "row tau()", - "error": [], - "warning": [] - }, - { - "query": "row var = tau()", - "error": [], - "warning": [] - }, - { - "query": "row var = 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": "row var = to_cartesianpoint(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_cartesianpoint(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_cartesianshape(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_cartesianshape(\"a\")", - "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": "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": "row var = to_double(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_double(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_dbl(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geopoint(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_geopoint(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_geoshape(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_geoshape(\"a\")", - "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": "row var = to_ip(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_ip(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row var = to_long(\"a\")", - "error": [], - "warning": [] - }, - { - "query": "row to_long(\"a\")", - "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)", + "query": "meta info", "error": [ - "Argument of [to_lower] must be [string], found value [5] type [number]" + "SyntaxError: token recognition error at: 'i'", + "SyntaxError: token recognition error at: 'n'", + "SyntaxError: token recognition error at: 'fo'", + "SyntaxError: missing 'functions' at ''" ], "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\")", + "query": "show", "error": [ - "Argument of [to_radians] must be [number], found value [\"a\"] type [string]" + "SyntaxError: missing 'info' at ''" ], "warning": [] }, { - "query": "row var = to_string(\"a\")", - "error": [], + "query": "show functions", + "error": [ + "SyntaxError: token recognition error at: 'f'", + "SyntaxError: token recognition error at: 'u'", + "SyntaxError: token recognition error at: 'n'", + "SyntaxError: token recognition error at: 'c'", + "SyntaxError: token recognition error at: 't'", + "SyntaxError: token recognition error at: 'io'", + "SyntaxError: token recognition error at: 'n'", + "SyntaxError: token recognition error at: 's'", + "SyntaxError: missing 'info' at ''" + ], "warning": [] }, { - "query": "row to_string(\"a\")", + "query": "show info", "error": [], "warning": [] }, { - "query": "row var = to_str(\"a\")", - "error": [], + "query": "show numberField", + "error": [ + "SyntaxError: token recognition error at: 'n'", + "SyntaxError: token recognition error at: 'u'", + "SyntaxError: token recognition error at: 'm'", + "SyntaxError: token recognition error at: 'b'", + "SyntaxError: token recognition error at: 'e'", + "SyntaxError: token recognition error at: 'r'", + "SyntaxError: token recognition error at: 'F'", + "SyntaxError: token recognition error at: 'ie'", + "SyntaxError: token recognition error at: 'l'", + "SyntaxError: token recognition error at: 'd'", + "SyntaxError: missing 'info' at ''" + ], "warning": [] }, { - "query": "row var = to_unsigned_long(\"a\")", - "error": [], + "query": "from index | limit ", + "error": [ + "SyntaxError: missing INTEGER_LITERAL at ''" + ], "warning": [] }, { - "query": "row to_unsigned_long(\"a\")", + "query": "from index | limit 4 ", "error": [], "warning": [] }, { - "query": "row var = to_ul(\"a\")", - "error": [], + "query": "from index | limit 4.5", + "error": [ + "SyntaxError: mismatched input '4.5' expecting INTEGER_LITERAL" + ], "warning": [] }, { - "query": "row var = to_ulong(\"a\")", - "error": [], + "query": "from index | limit a", + "error": [ + "SyntaxError: mismatched input 'a' expecting INTEGER_LITERAL" + ], "warning": [] }, { - "query": "row var = to_upper(\"a\")", - "error": [], + "query": "from index | limit numberField", + "error": [ + "SyntaxError: mismatched input 'numberField' expecting INTEGER_LITERAL" + ], "warning": [] }, { - "query": "row to_upper(\"a\")", - "error": [], + "query": "from index | limit stringField", + "error": [ + "SyntaxError: mismatched input 'stringField' expecting INTEGER_LITERAL" + ], "warning": [] }, { - "query": "row var = to_upper(to_string(\"a\"))", + "query": "from index | limit 4", "error": [], "warning": [] }, { - "query": "row var = to_upper(5)", + "query": "from index | keep ", "error": [ - "Argument of [to_upper] must be [string], found value [5] type [number]" + "SyntaxError: missing ID_PATTERN at ''" ], "warning": [] }, { - "query": "row var = to_version(\"a\")", + "query": "from index | keep stringField, numberField, dateField", "error": [], "warning": [] }, { - "query": "row to_version(\"a\")", + "query": "from index | keep `stringField`, `numberField`, `dateField`", "error": [], "warning": [] }, { - "query": "row var = to_ver(\"a\")", - "error": [], + "query": "from index | keep 4.5", + "error": [ + "SyntaxError: token recognition error at: '4'", + "SyntaxError: token recognition error at: '5'", + "SyntaxError: missing ID_PATTERN at '.'", + "SyntaxError: missing ID_PATTERN at ''" + ], "warning": [] }, { - "query": "row var = trim(\"a\")", - "error": [], + "query": "from index | keep `4.5`", + "error": [ + "Unknown column [4.5]" + ], "warning": [] }, { - "query": "row trim(\"a\")", - "error": [], + "query": "from index | keep missingField, numberField, dateField", + "error": [ + "Unknown column [missingField]" + ], "warning": [] }, { - "query": "row var = trim(to_string(\"a\"))", + "query": "from index | keep `any#Char$Field`", "error": [], "warning": [] }, { - "query": "row var = trim(5)", + "query": "from index | project ", "error": [ - "Argument of [trim] must be [string], found value [5] type [number]" + "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" ], "warning": [] }, { - "query": "row var = 5 > 0", - "error": [], + "query": "from index | project stringField, numberField, dateField", + "error": [ + "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" + ], "warning": [] }, { - "query": "row var = NOT 5 > 0", - "error": [], + "query": "from index | PROJECT stringField, numberField, dateField", + "error": [ + "SyntaxError: mismatched input 'PROJECT' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" + ], "warning": [] }, { - "query": "row var = (numberField > 0)", + "query": "from index | project missingField, numberField, dateField", "error": [ - "Unknown column [numberField]" + "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" ], "warning": [] }, { - "query": "row var = (NOT (5 > 0))", + "query": "from index | keep s*", "error": [], "warning": [] }, { - "query": "row var = to_ip(\"127.0.0.1\") > to_ip(\"127.0.0.1\")", + "query": "from index | keep *Field", "error": [], "warning": [] }, { - "query": "row var = now() > now()", + "query": "from index | keep s*Field", "error": [], "warning": [] }, { - "query": "row var = false > false", - "error": [ - "Argument of [>] must be [number], found value [false] type [boolean]", - "Argument of [>] must be [number], found value [false] type [boolean]" - ], - "warning": [] - }, - { - "query": "row var = now() > \"2022\"", + "query": "from index | keep string*Field", "error": [], "warning": [] }, { - "query": "row var = \"2022\" > now()", + "query": "from index | keep s*, n*", "error": [], "warning": [] }, { - "query": "row var = 5 >= 0", - "error": [], + "query": "from index | keep m*", + "error": [ + "Unknown column [m*]" + ], "warning": [] }, { - "query": "row var = NOT 5 >= 0", - "error": [], + "query": "from index | keep *m", + "error": [ + "Unknown column [*m]" + ], "warning": [] }, { - "query": "row var = (numberField >= 0)", + "query": "from index | keep d*m", "error": [ - "Unknown column [numberField]" + "Unknown column [d*m]" ], "warning": [] }, { - "query": "row var = (NOT (5 >= 0))", + "query": "from unsupported_index | keep unsupported_field", "error": [], - "warning": [] + "warning": [ + "Field [unsupported_field] cannot be retrieved, it is unsupported or not indexed; returning null" + ] }, { - "query": "row var = to_ip(\"127.0.0.1\") >= to_ip(\"127.0.0.1\")", + "query": "FROM index | STATS ROUND(AVG(numberField * 1.5)), COUNT(*), MIN(numberField * 10) | KEEP `MIN(numberField * 10)`", "error": [], "warning": [] }, { - "query": "row var = now() >= now()", + "query": "FROM index | STATS COUNT(*), MIN(numberField * 10), MAX(numberField)| KEEP `COUNT(*)`", "error": [], "warning": [] }, { - "query": "row var = false >= false", + "query": "from index | drop ", "error": [ - "Argument of [>=] must be [number], found value [false] type [boolean]", - "Argument of [>=] must be [number], found value [false] type [boolean]" + "SyntaxError: missing ID_PATTERN at ''" ], "warning": [] }, { - "query": "row var = now() >= \"2022\"", + "query": "from index | drop stringField, numberField, dateField", "error": [], "warning": [] }, { - "query": "row var = \"2022\" >= now()", - "error": [], + "query": "from index | drop 4.5", + "error": [ + "SyntaxError: token recognition error at: '4'", + "SyntaxError: token recognition error at: '5'", + "SyntaxError: missing ID_PATTERN at '.'", + "SyntaxError: missing ID_PATTERN at ''" + ], "warning": [] }, { - "query": "row var = 5 < 0", - "error": [], + "query": "from index | drop missingField, numberField, dateField", + "error": [ + "Unknown column [missingField]" + ], "warning": [] }, { - "query": "row var = NOT 5 < 0", + "query": "from index | drop `any#Char$Field`", "error": [], "warning": [] }, { - "query": "row var = (numberField < 0)", - "error": [ - "Unknown column [numberField]" - ], - "warning": [] - }, - { - "query": "row var = (NOT (5 < 0))", + "query": "from index | drop s*", "error": [], "warning": [] }, { - "query": "row var = to_ip(\"127.0.0.1\") < to_ip(\"127.0.0.1\")", + "query": "from index | drop s**Field", "error": [], "warning": [] }, { - "query": "row var = now() < now()", + "query": "from index | drop *Field*", "error": [], "warning": [] }, { - "query": "row var = false < false", - "error": [ - "Argument of [<] must be [number], found value [false] type [boolean]", - "Argument of [<] must be [number], found value [false] type [boolean]" - ], + "query": "from index | drop s*F*d", + "error": [], "warning": [] }, { - "query": "row var = now() < \"2022\"", + "query": "from index | drop *Field", "error": [], "warning": [] }, { - "query": "row var = \"2022\" < now()", + "query": "from index | drop s*Field", "error": [], "warning": [] }, { - "query": "row var = 5 <= 0", + "query": "from index | drop string*Field", "error": [], "warning": [] }, { - "query": "row var = NOT 5 <= 0", + "query": "from index | drop s*, n*", "error": [], "warning": [] }, { - "query": "row var = (numberField <= 0)", + "query": "from index | drop m*", "error": [ - "Unknown column [numberField]" + "Unknown column [m*]" ], "warning": [] }, { - "query": "row var = (NOT (5 <= 0))", - "error": [], + "query": "from index | drop *m", + "error": [ + "Unknown column [*m]" + ], "warning": [] }, { - "query": "row var = to_ip(\"127.0.0.1\") <= to_ip(\"127.0.0.1\")", - "error": [], + "query": "from index | drop d*m", + "error": [ + "Unknown column [d*m]" + ], "warning": [] }, { - "query": "row var = now() <= now()", - "error": [], + "query": "from index | drop *", + "error": [ + "Removing all fields is not allowed [*]" + ], "warning": [] }, { - "query": "row var = false <= false", + "query": "from index | drop stringField, *", "error": [ - "Argument of [<=] must be [number], found value [false] type [boolean]", - "Argument of [<=] must be [number], found value [false] type [boolean]" + "Removing all fields is not allowed [*]" ], "warning": [] }, { - "query": "row var = now() <= \"2022\"", + "query": "from index | drop @timestamp", "error": [], - "warning": [] + "warning": [ + "Drop [@timestamp] will remove all time filters to the search results" + ] }, { - "query": "row var = \"2022\" <= now()", + "query": "from index | drop stringField, @timestamp", "error": [], - "warning": [] + "warning": [ + "Drop [@timestamp] will remove all time filters to the search results" + ] }, { - "query": "row var = 5 == 0", + "query": "FROM index | STATS ROUND(AVG(numberField * 1.5)), COUNT(*), MIN(numberField * 10) | DROP `MIN(numberField * 10)`", "error": [], "warning": [] }, { - "query": "row var = NOT 5 == 0", + "query": "FROM index | STATS COUNT(*), MIN(numberField * 10), MAX(numberField)| DROP `COUNT(*)`", "error": [], "warning": [] }, { - "query": "row var = (numberField == 0)", + "query": "from a_index | mv_expand ", "error": [ - "Unknown column [numberField]" + "SyntaxError: missing {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER} at ''" ], "warning": [] }, { - "query": "row var = (NOT (5 == 0))", + "query": "from a_index | mv_expand stringField", "error": [], "warning": [] }, { - "query": "row var = to_ip(\"127.0.0.1\") == to_ip(\"127.0.0.1\")", + "query": "from a_index | mv_expand numberField", "error": [], "warning": [] }, { - "query": "row var = now() == now()", + "query": "from a_index | mv_expand dateField", "error": [], "warning": [] }, { - "query": "row var = false == false", + "query": "from a_index | mv_expand booleanField", "error": [], "warning": [] }, { - "query": "row var = now() == \"2022\"", + "query": "from a_index | mv_expand ipField", "error": [], "warning": [] }, { - "query": "row var = \"2022\" == now()", - "error": [], + "query": "from a_index | mv_expand numberField, b", + "error": [ + "SyntaxError: token recognition error at: ','", + "SyntaxError: extraneous input 'b' expecting " + ], "warning": [] }, { - "query": "row var = 5 != 0", + "query": "row a = \"a\" | mv_expand a", "error": [], "warning": [] }, { - "query": "row var = NOT 5 != 0", + "query": "row a = [1, 2, 3] | mv_expand a", "error": [], "warning": [] }, { - "query": "row var = (numberField != 0)", - "error": [ - "Unknown column [numberField]" - ], - "warning": [] - }, - { - "query": "row var = (NOT (5 != 0))", + "query": "row a = [true, false] | mv_expand a", "error": [], "warning": [] }, { - "query": "row var = to_ip(\"127.0.0.1\") != to_ip(\"127.0.0.1\")", + "query": "row a = [\"a\", \"b\"] | mv_expand a", "error": [], "warning": [] }, { - "query": "row var = now() != now()", - "error": [], + "query": "from a_index | rename", + "error": [ + "SyntaxError: mismatched input '' expecting ID_PATTERN" + ], "warning": [] }, { - "query": "row var = false != false", - "error": [], + "query": "from a_index | rename stringField", + "error": [ + "SyntaxError: mismatched input '' expecting 'as'" + ], "warning": [] }, { - "query": "row var = now() != \"2022\"", - "error": [], + "query": "from a_index | rename a", + "error": [ + "SyntaxError: mismatched input '' expecting 'as'", + "Unknown column [a]" + ], "warning": [] }, { - "query": "row var = \"2022\" != now()", - "error": [], + "query": "from a_index | rename stringField as", + "error": [ + "SyntaxError: missing ID_PATTERN at ''" + ], "warning": [] }, { - "query": "row var = 1 + 1", - "error": [], + "query": "from a_index | rename missingField as", + "error": [ + "SyntaxError: missing ID_PATTERN at ''", + "Unknown column [missingField]" + ], "warning": [] }, { - "query": "row var = (5 + 1)", + "query": "from a_index | rename stringField as b", "error": [], "warning": [] }, { - "query": "row var = now() + now()", - "error": [ - "Argument of [+] must be [time_literal], found value [now()] type [date]" - ], + "query": "from a_index | rename stringField AS b", + "error": [], "warning": [] }, { - "query": "row var = 1 - 1", + "query": "from a_index | rename stringField As b", "error": [], "warning": [] }, { - "query": "row var = (5 - 1)", + "query": "from a_index | rename stringField As b, b AS c", "error": [], "warning": [] }, { - "query": "row var = now() - now()", + "query": "from a_index | rename fn() as a", "error": [ - "Argument of [-] must be [time_literal], found value [now()] type [date]" + "SyntaxError: token recognition error at: '('", + "SyntaxError: token recognition error at: ')'", + "Unknown column [fn]", + "Unknown column [a]" ], "warning": [] }, { - "query": "row var = 1 * 1", + "query": "from a_index | eval numberField + 1 | rename `numberField + 1` as a", "error": [], "warning": [] }, { - "query": "row var = (5 * 1)", + "query": "from a_index | stats avg(numberField) | rename `avg(numberField)` as avg0", "error": [], "warning": [] }, { - "query": "row var = now() * now()", + "query": "from a_index |eval numberField + 1 | rename `numberField + 1` as ", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [now()] type [date]" + "SyntaxError: missing ID_PATTERN at ''" ], "warning": [] }, { - "query": "row var = 1 / 1", - "error": [], + "query": "from a_index | rename s* as strings", + "error": [ + "Using wildcards (*) in RENAME is not allowed [s*]", + "Unknown column [strings]" + ], "warning": [] }, { - "query": "row var = (5 / 1)", + "query": "row a = 10 | rename a as `this``is fine`", "error": [], "warning": [] }, { - "query": "row var = now() / now()", + "query": "row a = 10 | rename a as this is fine", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [now()] type [date]" + "SyntaxError: mismatched input 'is' expecting " ], "warning": [] }, { - "query": "row var = 1 % 1", - "error": [], - "warning": [] - }, - { - "query": "row var = (5 % 1)", - "error": [], + "query": "from a_index | dissect", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + ], "warning": [] }, { - "query": "row var = now() % now()", + "query": "from a_index | dissect stringField", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [now()] type [date]" + "SyntaxError: missing QUOTED_STRING at ''" ], "warning": [] }, { - "query": "row var = \"a\" like \"?a\"", - "error": [], + "query": "from a_index | dissect stringField 2", + "error": [ + "SyntaxError: mismatched input '2' expecting QUOTED_STRING" + ], "warning": [] }, { - "query": "row var = \"a\" NOT like \"?a\"", - "error": [], + "query": "from a_index | dissect stringField .", + "error": [ + "SyntaxError: mismatched input '' expecting {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "Unknown column [stringField.]" + ], "warning": [] }, { - "query": "row var = NOT \"a\" like \"?a\"", - "error": [], + "query": "from a_index | dissect stringField %a", + "error": [ + "SyntaxError: mismatched input '%' expecting QUOTED_STRING", + "SyntaxError: mismatched input '' expecting '='" + ], "warning": [] }, { - "query": "row var = NOT \"a\" NOT like \"?a\"", + "query": "from a_index | dissect stringField \"%{firstWord}\"", "error": [], "warning": [] }, { - "query": "row var = 5 like \"?a\"", + "query": "from a_index | dissect numberField \"%{firstWord}\"", "error": [ - "Argument of [like] must be [string], found value [5] type [number]" + "DISSECT only supports string type values, found [numberField] of type [number]" ], "warning": [] }, { - "query": "row var = 5 NOT like \"?a\"", + "query": "from a_index | dissect stringField \"%{firstWord}\" option ", "error": [ - "Argument of [not_like] must be [string], found value [5] type [number]" + "SyntaxError: mismatched input '' expecting '='" ], "warning": [] }, { - "query": "row var = NOT 5 like \"?a\"", + "query": "from a_index | dissect stringField \"%{firstWord}\" option = ", "error": [ - "Argument of [like] must be [string], found value [5] type [number]" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', 'null', '?', 'true', '+', '-', OPENING_BRACKET}", + "Invalid option for DISSECT: [option]" ], "warning": [] }, { - "query": "row var = NOT 5 NOT like \"?a\"", + "query": "from a_index | dissect stringField \"%{firstWord}\" option = 1", "error": [ - "Argument of [not_like] must be [string], found value [5] type [number]" + "Invalid option for DISSECT: [option]" ], "warning": [] }, { - "query": "row var = \"a\" rlike \"?a\"", + "query": "from a_index | dissect stringField \"%{firstWord}\" append_separator = \"-\"", "error": [], "warning": [] }, { - "query": "row var = \"a\" NOT rlike \"?a\"", - "error": [], + "query": "from a_index | dissect stringField \"%{firstWord}\" ignore_missing = true", + "error": [ + "Invalid option for DISSECT: [ignore_missing]" + ], "warning": [] }, { - "query": "row var = NOT \"a\" rlike \"?a\"", - "error": [], + "query": "from a_index | dissect stringField \"%{firstWord}\" append_separator = true", + "error": [ + "Invalid value for DISSECT append_separator: expected a string, but was [true]" + ], "warning": [] }, { - "query": "row var = NOT \"a\" NOT rlike \"?a\"", + "query": "from a_index | dissect stringField \"%{firstWord}\" | keep firstWord", "error": [], "warning": [] }, { - "query": "row var = 5 rlike \"?a\"", + "query": "from a_index | grok", "error": [ - "Argument of [rlike] must be [string], found value [5] type [number]" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "row var = 5 NOT rlike \"?a\"", + "query": "from a_index | grok stringField", "error": [ - "Argument of [not_rlike] must be [string], found value [5] type [number]" + "SyntaxError: missing QUOTED_STRING at ''" ], "warning": [] }, { - "query": "row var = NOT 5 rlike \"?a\"", + "query": "from a_index | grok stringField 2", "error": [ - "Argument of [rlike] must be [string], found value [5] type [number]" + "SyntaxError: mismatched input '2' expecting QUOTED_STRING" ], "warning": [] }, { - "query": "row var = NOT 5 NOT rlike \"?a\"", + "query": "from a_index | grok stringField .", "error": [ - "Argument of [not_rlike] must be [string], found value [5] type [number]" + "SyntaxError: mismatched input '' expecting {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "Unknown column [stringField.]" ], "warning": [] }, { - "query": "row var = mv_sort([\"a\", \"b\"], \"bogus\")", - "error": [], - "warning": [ - "Invalid option [\"bogus\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." - ] - }, - { - "query": "row var = mv_sort([\"a\", \"b\"], \"ASC\")", - "error": [], + "query": "from a_index | grok stringField %a", + "error": [ + "SyntaxError: mismatched input '%' expecting QUOTED_STRING" + ], "warning": [] }, { - "query": "row var = mv_sort([\"a\", \"b\"], \"DESC\")", + "query": "from a_index | grok stringField \"%{firstWord}\"", "error": [], "warning": [] }, { - "query": "row 1 anno", - "error": [ - "ROW does not support [date_period] in expression [1 anno]" - ], - "warning": [] - }, - { - "query": "row var = 1 anno", + "query": "from a_index | grok numberField \"%{firstWord}\"", "error": [ - "Unexpected time interval qualifier: 'anno'" + "GROK only supports string type values, found [numberField] of type [number]" ], "warning": [] }, { - "query": "row now() + 1 anno", - "error": [ - "Unexpected time interval qualifier: 'anno'" - ], + "query": "from a_index | grok stringField \"%{firstWord}\" | keep firstWord", + "error": [], "warning": [] }, { - "query": "row 1 year", + "query": "from a_index | where b", "error": [ - "ROW does not support [date_period] in expression [1 year]" + "Unknown column [b]" ], "warning": [] }, { - "query": "row 1 year", - "error": [ - "ROW does not support [date_period] in expression [1 year]" - ], + "query": "from a_index | where true", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 year", + "query": "from a_index | where NOT true", "error": [], "warning": [] }, { - "query": "row var = now() - 1 YEAR", + "query": "from a_index | where false", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Year", + "query": "from a_index | where NOT false", "error": [], "warning": [] }, { - "query": "row var = now() + 1 year", + "query": "from a_index | where 1 > 0", "error": [], "warning": [] }, { - "query": "row 1 year + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 year] type [duration]" - ], + "query": "from a_index | where NOT 1 > 0", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 year", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 year] type [duration]" - ], + "query": "from a_index | where +1 > 0", + "error": [], "warning": [] }, { - "query": "row var = now() / 1 year", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 year] type [duration]" - ], + "query": "from a_index | where NOT +1 > 0", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 year", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 year] type [duration]" - ], + "query": "from a_index | where 1 * 1 > 0", + "error": [], "warning": [] }, { - "query": "row 1 years", - "error": [ - "ROW does not support [date_period] in expression [1 years]" - ], + "query": "from a_index | where NOT 1 * 1 > 0", + "error": [], "warning": [] }, { - "query": "row 1 years", - "error": [ - "ROW does not support [date_period] in expression [1 years]" - ], + "query": "from a_index | where -1 > 0", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 years", + "query": "from a_index | where NOT -1 > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 YEARS", + "query": "from a_index | where 1 / 1 > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Years", + "query": "from a_index | where NOT 1 / 1 > 0", "error": [], "warning": [] }, { - "query": "row var = now() + 1 years", + "query": "from a_index | where 1.0 > 0", "error": [], "warning": [] }, { - "query": "row 1 years + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 years] type [duration]" - ], + "query": "from a_index | where NOT 1.0 > 0", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 years", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 years] type [duration]" - ], + "query": "from a_index | where 1.5 > 0", + "error": [], "warning": [] }, { - "query": "row var = now() / 1 years", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 years] type [duration]" - ], + "query": "from a_index | where NOT 1.5 > 0", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 years", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 years] type [duration]" - ], + "query": "from a_index | where numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 month", - "error": [ - "ROW does not support [date_period] in expression [1 month]" - ], + "query": "from a_index | where NOT numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 month", - "error": [ - "ROW does not support [date_period] in expression [1 month]" - ], + "query": "from a_index | where (numberField > 0)", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 month", + "query": "from a_index | where (NOT (numberField > 0))", "error": [], "warning": [] }, { - "query": "row var = now() - 1 MONTH", + "query": "from a_index | where 1 > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Month", + "query": "from a_index | where stringField > stringField", "error": [], "warning": [] }, { - "query": "row var = now() + 1 month", + "query": "from a_index | where numberField > numberField", "error": [], "warning": [] }, { - "query": "row 1 month + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 month] type [duration]" - ], + "query": "from a_index | where dateField > dateField", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 month", + "query": "from a_index | where booleanField > booleanField", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 month] type [duration]" + "Argument of [>] must be [number], found value [booleanField] type [boolean]", + "Argument of [>] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "row var = now() / 1 month", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 month] type [duration]" - ], + "query": "from a_index | where ipField > ipField", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 month", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 month] type [duration]" - ], + "query": "from a_index | where numberField >= 0", + "error": [], "warning": [] }, { - "query": "row 1 months", - "error": [ - "ROW does not support [date_period] in expression [1 months]" - ], + "query": "from a_index | where NOT numberField >= 0", + "error": [], "warning": [] }, { - "query": "row 1 months", - "error": [ - "ROW does not support [date_period] in expression [1 months]" - ], + "query": "from a_index | where (numberField >= 0)", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 months", + "query": "from a_index | where (NOT (numberField >= 0))", "error": [], "warning": [] }, { - "query": "row var = now() - 1 MONTHS", + "query": "from a_index | where 1 >= 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Months", + "query": "from a_index | where stringField >= stringField", "error": [], "warning": [] }, { - "query": "row var = now() + 1 months", + "query": "from a_index | where numberField >= numberField", "error": [], "warning": [] }, { - "query": "row 1 months + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 months] type [duration]" - ], + "query": "from a_index | where dateField >= dateField", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 months", + "query": "from a_index | where booleanField >= booleanField", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 months] type [duration]" + "Argument of [>=] must be [number], found value [booleanField] type [boolean]", + "Argument of [>=] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "row var = now() / 1 months", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 months] type [duration]" - ], + "query": "from a_index | where ipField >= ipField", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 months", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 months] type [duration]" - ], + "query": "from a_index | where numberField < 0", + "error": [], "warning": [] }, { - "query": "row 1 week", - "error": [ - "ROW does not support [date_period] in expression [1 week]" - ], + "query": "from a_index | where NOT numberField < 0", + "error": [], "warning": [] }, { - "query": "row 1 week", - "error": [ - "ROW does not support [date_period] in expression [1 week]" - ], + "query": "from a_index | where (numberField < 0)", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 week", + "query": "from a_index | where (NOT (numberField < 0))", "error": [], "warning": [] }, { - "query": "row var = now() - 1 WEEK", + "query": "from a_index | where 1 < 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Week", + "query": "from a_index | where stringField < stringField", "error": [], "warning": [] }, { - "query": "row var = now() + 1 week", + "query": "from a_index | where numberField < numberField", "error": [], "warning": [] }, { - "query": "row 1 week + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 week] type [duration]" - ], + "query": "from a_index | where dateField < dateField", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 week", + "query": "from a_index | where booleanField < booleanField", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 week] type [duration]" + "Argument of [<] must be [number], found value [booleanField] type [boolean]", + "Argument of [<] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "row var = now() / 1 week", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 week] type [duration]" - ], + "query": "from a_index | where ipField < ipField", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 week", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 week] type [duration]" - ], + "query": "from a_index | where numberField <= 0", + "error": [], "warning": [] }, { - "query": "row 1 weeks", - "error": [ - "ROW does not support [date_period] in expression [1 weeks]" - ], + "query": "from a_index | where NOT numberField <= 0", + "error": [], "warning": [] }, { - "query": "row 1 weeks", - "error": [ - "ROW does not support [date_period] in expression [1 weeks]" - ], + "query": "from a_index | where (numberField <= 0)", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 weeks", + "query": "from a_index | where (NOT (numberField <= 0))", "error": [], "warning": [] }, { - "query": "row var = now() - 1 WEEKS", + "query": "from a_index | where 1 <= 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Weeks", + "query": "from a_index | where stringField <= stringField", "error": [], "warning": [] }, { - "query": "row var = now() + 1 weeks", + "query": "from a_index | where numberField <= numberField", "error": [], "warning": [] }, { - "query": "row 1 weeks + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 weeks] type [duration]" - ], + "query": "from a_index | where dateField <= dateField", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 weeks", + "query": "from a_index | where booleanField <= booleanField", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 weeks] type [duration]" + "Argument of [<=] must be [number], found value [booleanField] type [boolean]", + "Argument of [<=] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "row var = now() / 1 weeks", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 weeks] type [duration]" - ], + "query": "from a_index | where ipField <= ipField", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 weeks", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 weeks] type [duration]" - ], + "query": "from a_index | where numberField == 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where NOT numberField == 0", + "error": [], "warning": [] }, { - "query": "row 1 day", - "error": [ - "ROW does not support [date_period] in expression [1 day]" - ], + "query": "from a_index | where (numberField == 0)", + "error": [], "warning": [] }, { - "query": "row 1 day", - "error": [ - "ROW does not support [date_period] in expression [1 day]" - ], + "query": "from a_index | where (NOT (numberField == 0))", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 day", + "query": "from a_index | where 1 == 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 DAY", + "query": "from a_index | where stringField == stringField", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Day", + "query": "from a_index | where numberField == numberField", "error": [], "warning": [] }, { - "query": "row var = now() + 1 day", + "query": "from a_index | where dateField == dateField", "error": [], "warning": [] }, { - "query": "row 1 day + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 day] type [duration]" - ], + "query": "from a_index | where booleanField == booleanField", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 day", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 day] type [duration]" - ], + "query": "from a_index | where ipField == ipField", + "error": [], "warning": [] }, { - "query": "row var = now() / 1 day", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 day] type [duration]" - ], + "query": "from a_index | where numberField != 0", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 day", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 day] type [duration]" - ], + "query": "from a_index | where NOT numberField != 0", + "error": [], "warning": [] }, { - "query": "row 1 days", - "error": [ - "ROW does not support [date_period] in expression [1 days]" - ], + "query": "from a_index | where (numberField != 0)", + "error": [], "warning": [] }, { - "query": "row 1 days", - "error": [ - "ROW does not support [date_period] in expression [1 days]" - ], + "query": "from a_index | where (NOT (numberField != 0))", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 days", + "query": "from a_index | where 1 != 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 DAYS", + "query": "from a_index | where stringField != stringField", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Days", + "query": "from a_index | where numberField != numberField", "error": [], "warning": [] }, { - "query": "row var = now() + 1 days", + "query": "from a_index | where dateField != dateField", "error": [], "warning": [] }, { - "query": "row 1 days + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 days] type [duration]" - ], + "query": "from a_index | where booleanField != booleanField", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 days", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 days] type [duration]" - ], + "query": "from a_index | where ipField != ipField", + "error": [], "warning": [] }, { - "query": "row var = now() / 1 days", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 days] type [duration]" - ], + "query": "from a_index | where - numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 days", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 days] type [duration]" - ], + "query": "from a_index | where - round(numberField) > 0", + "error": [], "warning": [] }, { - "query": "row 1 hour", - "error": [ - "ROW does not support [date_period] in expression [1 hour]" - ], + "query": "from a_index | where 1 + - numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 hour", - "error": [ - "ROW does not support [date_period] in expression [1 hour]" - ], + "query": "from a_index | where 1 - numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 hour", + "query": "from a_index | where - numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 HOUR", + "query": "from a_index | where - round(numberField) > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Hour", + "query": "from a_index | where 1 + - numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() + 1 hour", + "query": "from a_index | where 1 - numberField > 0", "error": [], "warning": [] }, { - "query": "row 1 hour + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 hour] type [duration]" - ], + "query": "from a_index | where + numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 hour", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 hour] type [duration]" - ], + "query": "from a_index | where + round(numberField) > 0", + "error": [], "warning": [] }, { - "query": "row var = now() / 1 hour", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 hour] type [duration]" - ], + "query": "from a_index | where 1 + + numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 hour", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 hour] type [duration]" - ], + "query": "from a_index | where 1 + numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 hours", - "error": [ - "ROW does not support [date_period] in expression [1 hours]" - ], + "query": "from a_index | where + numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 hours", - "error": [ - "ROW does not support [date_period] in expression [1 hours]" - ], + "query": "from a_index | where + round(numberField) > 0", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 hours", + "query": "from a_index | where 1 + + numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 HOURS", + "query": "from a_index | where 1 + numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Hours", + "query": "from a_index | where not booleanField", "error": [], "warning": [] }, { - "query": "row var = now() + 1 hours", + "query": "from a_index | where -- numberField > 0", "error": [], "warning": [] }, { - "query": "row 1 hours + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 hours] type [duration]" - ], + "query": "from a_index | where -- round(numberField) > 0", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 hours", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 hours] type [duration]" - ], + "query": "from a_index | where 1 + -- numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() / 1 hours", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 hours] type [duration]" - ], + "query": "from a_index | where 1 -- numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 hours", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 hours] type [duration]" - ], + "query": "from a_index | where -+ numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 minute", - "error": [ - "ROW does not support [date_period] in expression [1 minute]" - ], + "query": "from a_index | where -+ round(numberField) > 0", + "error": [], "warning": [] }, { - "query": "row 1 minute", - "error": [ - "ROW does not support [date_period] in expression [1 minute]" - ], + "query": "from a_index | where 1 + -+ numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 minute", + "query": "from a_index | where 1 -+ numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 MINUTE", + "query": "from a_index | where +- numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Minute", + "query": "from a_index | where +- round(numberField) > 0", "error": [], "warning": [] }, { - "query": "row var = now() + 1 minute", + "query": "from a_index | where 1 + +- numberField > 0", "error": [], "warning": [] }, { - "query": "row 1 minute + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 minute] type [duration]" - ], + "query": "from a_index | where 1 +- numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 minute", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 minute] type [duration]" - ], + "query": "from a_index | where ++ numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() / 1 minute", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 minute] type [duration]" - ], + "query": "from a_index | where ++ round(numberField) > 0", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 minute", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 minute] type [duration]" - ], + "query": "from a_index | where 1 + ++ numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 minutes", - "error": [ - "ROW does not support [date_period] in expression [1 minutes]" - ], + "query": "from a_index | where 1 ++ numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 minutes", - "error": [ - "ROW does not support [date_period] in expression [1 minutes]" - ], + "query": "from a_index | where not not booleanField", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 minutes", + "query": "from a_index | where --- numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 MINUTES", + "query": "from a_index | where --- round(numberField) > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Minutes", + "query": "from a_index | where 1 + --- numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() + 1 minutes", + "query": "from a_index | where 1 --- numberField > 0", "error": [], "warning": [] }, { - "query": "row 1 minutes + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 minutes] type [duration]" - ], + "query": "from a_index | where -+- numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 minutes", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 minutes] type [duration]" - ], + "query": "from a_index | where -+- round(numberField) > 0", + "error": [], "warning": [] }, { - "query": "row var = now() / 1 minutes", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 minutes] type [duration]" - ], + "query": "from a_index | where 1 + -+- numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 minutes", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 minutes] type [duration]" - ], + "query": "from a_index | where 1 -+- numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 second", - "error": [ - "ROW does not support [date_period] in expression [1 second]" - ], + "query": "from a_index | where +-+ numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 second", - "error": [ - "ROW does not support [date_period] in expression [1 second]" - ], + "query": "from a_index | where +-+ round(numberField) > 0", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 second", + "query": "from a_index | where 1 + +-+ numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 SECOND", + "query": "from a_index | where 1 +-+ numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Second", + "query": "from a_index | where +++ numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() + 1 second", + "query": "from a_index | where +++ round(numberField) > 0", "error": [], "warning": [] }, { - "query": "row 1 second + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 second] type [duration]" - ], + "query": "from a_index | where 1 + +++ numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 second", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 second] type [duration]" - ], + "query": "from a_index | where 1 +++ numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() / 1 second", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 second] type [duration]" - ], + "query": "from a_index | where not not not booleanField", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 second", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 second] type [duration]" - ], + "query": "from a_index | where ---- numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 seconds", - "error": [ - "ROW does not support [date_period] in expression [1 seconds]" - ], + "query": "from a_index | where ---- round(numberField) > 0", + "error": [], "warning": [] }, { - "query": "row 1 seconds", - "error": [ - "ROW does not support [date_period] in expression [1 seconds]" - ], + "query": "from a_index | where 1 + ---- numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 seconds", + "query": "from a_index | where 1 ---- numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 SECONDS", + "query": "from a_index | where -+-+ numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Seconds", + "query": "from a_index | where -+-+ round(numberField) > 0", "error": [], "warning": [] }, { - "query": "row var = now() + 1 seconds", + "query": "from a_index | where 1 + -+-+ numberField > 0", "error": [], "warning": [] }, { - "query": "row 1 seconds + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 seconds] type [duration]" - ], + "query": "from a_index | where 1 -+-+ numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() * 1 seconds", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 seconds] type [duration]" - ], + "query": "from a_index | where +-+- numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() / 1 seconds", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 seconds] type [duration]" - ], + "query": "from a_index | where +-+- round(numberField) > 0", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 seconds", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 seconds] type [duration]" - ], + "query": "from a_index | where 1 + +-+- numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 millisecond", - "error": [ - "ROW does not support [date_period] in expression [1 millisecond]" - ], + "query": "from a_index | where 1 +-+- numberField > 0", + "error": [], "warning": [] }, { - "query": "row 1 millisecond", - "error": [ - "ROW does not support [date_period] in expression [1 millisecond]" - ], + "query": "from a_index | where ++++ numberField > 0", + "error": [], "warning": [] }, { - "query": "row var = now() - 1 millisecond", + "query": "from a_index | where ++++ round(numberField) > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 MILLISECOND", + "query": "from a_index | where 1 + ++++ numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() - 1 Millisecond", + "query": "from a_index | where 1 ++++ numberField > 0", "error": [], "warning": [] }, { - "query": "row var = now() + 1 millisecond", + "query": "from a_index | where not not not not booleanField", "error": [], "warning": [] }, { - "query": "row 1 millisecond + 1 year", + "query": "from a_index | where *+ numberField", "error": [ - "Argument of [+] must be [date], found value [1 millisecond] type [duration]" + "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "row var = now() * 1 millisecond", + "query": "from a_index | where /+ numberField", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 millisecond] type [duration]" + "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "row var = now() / 1 millisecond", + "query": "from a_index | where %+ numberField", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 millisecond] type [duration]" + "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "row var = now() % 1 millisecond", + "query": "from a_index | where numberField =~ 0", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 millisecond] type [duration]" + "Argument of [=~] must be [string], found value [numberField] type [number]", + "Argument of [=~] must be [string], found value [0] type [number]" ], "warning": [] }, { - "query": "row 1 milliseconds", + "query": "from a_index | where NOT numberField =~ 0", "error": [ - "ROW does not support [date_period] in expression [1 milliseconds]" + "Argument of [=~] must be [string], found value [numberField] type [number]", + "Argument of [=~] must be [string], found value [0] type [number]" ], "warning": [] }, { - "query": "row 1 milliseconds", + "query": "from a_index | where (numberField =~ 0)", "error": [ - "ROW does not support [date_period] in expression [1 milliseconds]" + "Argument of [=~] must be [string], found value [numberField] type [number]", + "Argument of [=~] must be [string], found value [0] type [number]" ], "warning": [] }, { - "query": "row var = now() - 1 milliseconds", - "error": [], - "warning": [] - }, - { - "query": "row var = now() - 1 MILLISECONDS", - "error": [], - "warning": [] - }, - { - "query": "row var = now() - 1 Milliseconds", - "error": [], - "warning": [] - }, - { - "query": "row var = now() + 1 milliseconds", - "error": [], + "query": "from a_index | where (NOT (numberField =~ 0))", + "error": [ + "Argument of [=~] must be [string], found value [numberField] type [number]", + "Argument of [=~] must be [string], found value [0] type [number]" + ], "warning": [] }, { - "query": "row 1 milliseconds + 1 year", + "query": "from a_index | where 1 =~ 0", "error": [ - "Argument of [+] must be [date], found value [1 milliseconds] type [duration]" + "Argument of [=~] must be [string], found value [1] type [number]", + "Argument of [=~] must be [string], found value [0] type [number]" ], "warning": [] }, { - "query": "row var = now() * 1 milliseconds", + "query": "from a_index | eval stringField =~ 0", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 milliseconds] type [duration]" + "Argument of [=~] must be [string], found value [0] type [number]" ], "warning": [] }, { - "query": "row var = now() / 1 milliseconds", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 milliseconds] type [duration]" - ], + "query": "from a_index | where stringField like \"?a\"", + "error": [], "warning": [] }, { - "query": "row var = now() % 1 milliseconds", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 milliseconds] type [duration]" - ], + "query": "from a_index | where stringField NOT like \"?a\"", + "error": [], "warning": [] }, { - "query": "meta", - "error": [ - "SyntaxError: missing 'functions' at ''" - ], + "query": "from a_index | where NOT stringField like \"?a\"", + "error": [], "warning": [] }, { - "query": "meta functions", + "query": "from a_index | where NOT stringField NOT like \"?a\"", "error": [], "warning": [] }, { - "query": "meta functions()", + "query": "from a_index | where numberField like \"?a\"", "error": [ - "SyntaxError: token recognition error at: '('", - "SyntaxError: token recognition error at: ')'" + "Argument of [like] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "meta functions blah", + "query": "from a_index | where numberField NOT like \"?a\"", "error": [ - "SyntaxError: token recognition error at: 'b'", - "SyntaxError: token recognition error at: 'l'", - "SyntaxError: token recognition error at: 'a'", - "SyntaxError: token recognition error at: 'h'" + "Argument of [not_like] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "meta info", + "query": "from a_index | where NOT numberField like \"?a\"", "error": [ - "SyntaxError: token recognition error at: 'i'", - "SyntaxError: token recognition error at: 'n'", - "SyntaxError: token recognition error at: 'fo'", - "SyntaxError: missing 'functions' at ''" + "Argument of [like] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "show", + "query": "from a_index | where NOT numberField NOT like \"?a\"", "error": [ - "SyntaxError: missing 'info' at ''" + "Argument of [not_like] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "show functions", - "error": [ - "SyntaxError: token recognition error at: 'f'", - "SyntaxError: token recognition error at: 'u'", - "SyntaxError: token recognition error at: 'n'", - "SyntaxError: token recognition error at: 'c'", - "SyntaxError: token recognition error at: 't'", - "SyntaxError: token recognition error at: 'io'", - "SyntaxError: token recognition error at: 'n'", - "SyntaxError: token recognition error at: 's'", - "SyntaxError: missing 'info' at ''" - ], + "query": "from a_index | where stringField rlike \"?a\"", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where stringField NOT rlike \"?a\"", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where NOT stringField rlike \"?a\"", + "error": [], "warning": [] }, { - "query": "show info", + "query": "from a_index | where NOT stringField NOT rlike \"?a\"", "error": [], "warning": [] }, { - "query": "show numberField", + "query": "from a_index | where numberField rlike \"?a\"", "error": [ - "SyntaxError: token recognition error at: 'n'", - "SyntaxError: token recognition error at: 'u'", - "SyntaxError: token recognition error at: 'm'", - "SyntaxError: token recognition error at: 'b'", - "SyntaxError: token recognition error at: 'e'", - "SyntaxError: token recognition error at: 'r'", - "SyntaxError: token recognition error at: 'F'", - "SyntaxError: token recognition error at: 'ie'", - "SyntaxError: token recognition error at: 'l'", - "SyntaxError: token recognition error at: 'd'", - "SyntaxError: missing 'info' at ''" + "Argument of [rlike] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from index | limit ", + "query": "from a_index | where numberField NOT rlike \"?a\"", "error": [ - "SyntaxError: missing INTEGER_LITERAL at ''" + "Argument of [not_rlike] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from index | limit 4 ", - "error": [], + "query": "from a_index | where NOT numberField rlike \"?a\"", + "error": [ + "Argument of [rlike] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from index | limit 4.5", + "query": "from a_index | where NOT numberField NOT rlike \"?a\"", "error": [ - "SyntaxError: mismatched input '4.5' expecting INTEGER_LITERAL" + "Argument of [not_rlike] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from index | limit a", + "query": "from a_index | where cidr_match(ipField)", "error": [ - "SyntaxError: mismatched input 'a' expecting INTEGER_LITERAL" + "Error: [cidr_match] function expects at least 2 arguments, got 1." ], "warning": [] }, { - "query": "from index | limit numberField", - "error": [ - "SyntaxError: mismatched input 'numberField' expecting INTEGER_LITERAL" - ], + "query": "from a_index | eval cidr = \"172.0.0.1/30\" | where cidr_match(ipField, \"172.0.0.1/30\", cidr)", + "error": [], "warning": [] }, { - "query": "from index | limit stringField", - "error": [ - "SyntaxError: mismatched input 'stringField' expecting INTEGER_LITERAL" - ], + "query": "from a_index | where numberField IS NULL", + "error": [], "warning": [] }, { - "query": "from index | limit 4", + "query": "from a_index | where numberField IS null", "error": [], "warning": [] }, { - "query": "from index | keep ", - "error": [ - "SyntaxError: missing ID_PATTERN at ''" - ], + "query": "from a_index | where numberField is null", + "error": [], "warning": [] }, { - "query": "from index | keep stringField, numberField, dateField", + "query": "from a_index | where numberField is NULL", "error": [], "warning": [] }, { - "query": "from index | keep `stringField`, `numberField`, `dateField`", + "query": "from a_index | where numberField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from index | keep 4.5", - "error": [ - "SyntaxError: token recognition error at: '4'", - "SyntaxError: token recognition error at: '5'", - "SyntaxError: missing ID_PATTERN at '.'", - "SyntaxError: missing ID_PATTERN at ''" - ], + "query": "from a_index | where numberField IS NOT null", + "error": [], "warning": [] }, { - "query": "from index | keep `4.5`", - "error": [ - "Unknown column [4.5]" - ], + "query": "from a_index | where numberField IS not NULL", + "error": [], "warning": [] }, { - "query": "from index | keep missingField, numberField, dateField", - "error": [ - "Unknown column [missingField]" - ], + "query": "from a_index | where numberField Is nOt NuLL", + "error": [], "warning": [] }, { - "query": "from index | keep `any#Char$Field`", + "query": "from a_index | where dateField IS NULL", "error": [], "warning": [] }, { - "query": "from index | project ", - "error": [ - "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" - ], + "query": "from a_index | where dateField IS null", + "error": [], "warning": [] }, { - "query": "from index | project stringField, numberField, dateField", - "error": [ - "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" - ], + "query": "from a_index | where dateField is null", + "error": [], "warning": [] }, { - "query": "from index | PROJECT stringField, numberField, dateField", - "error": [ - "SyntaxError: mismatched input 'PROJECT' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" - ], + "query": "from a_index | where dateField is NULL", + "error": [], "warning": [] }, { - "query": "from index | project missingField, numberField, dateField", - "error": [ - "SyntaxError: mismatched input 'project' expecting {'dissect', 'drop', 'enrich', 'eval', 'grok', 'inlinestats', 'keep', 'limit', 'mv_expand', 'rename', 'sort', 'stats', 'where'}" - ], + "query": "from a_index | where dateField IS NOT NULL", + "error": [], "warning": [] }, { - "query": "from index | keep s*", + "query": "from a_index | where dateField IS NOT null", "error": [], "warning": [] }, { - "query": "from index | keep *Field", + "query": "from a_index | where dateField IS not NULL", "error": [], "warning": [] }, { - "query": "from index | keep s*Field", + "query": "from a_index | where dateField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from index | keep string*Field", + "query": "from a_index | where booleanField IS NULL", "error": [], "warning": [] }, { - "query": "from index | keep s*, n*", + "query": "from a_index | where booleanField IS null", "error": [], "warning": [] }, { - "query": "from index | keep m*", - "error": [ - "Unknown column [m*]" - ], + "query": "from a_index | where booleanField is null", + "error": [], "warning": [] }, { - "query": "from index | keep *m", - "error": [ - "Unknown column [*m]" - ], + "query": "from a_index | where booleanField is NULL", + "error": [], "warning": [] }, { - "query": "from index | keep d*m", - "error": [ - "Unknown column [d*m]" - ], + "query": "from a_index | where booleanField IS NOT NULL", + "error": [], "warning": [] }, { - "query": "from unsupported_index | keep unsupported_field", + "query": "from a_index | where booleanField IS NOT null", "error": [], - "warning": [ - "Field [unsupported_field] cannot be retrieved, it is unsupported or not indexed; returning null" - ] + "warning": [] }, { - "query": "FROM index | STATS ROUND(AVG(numberField * 1.5)), COUNT(*), MIN(numberField * 10) | KEEP `MIN(numberField * 10)`", + "query": "from a_index | where booleanField IS not NULL", "error": [], "warning": [] }, { - "query": "FROM index | STATS COUNT(*), MIN(numberField * 10), MAX(numberField)| KEEP `COUNT(*)`", + "query": "from a_index | where booleanField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from index | drop ", - "error": [ - "SyntaxError: missing ID_PATTERN at ''" - ], + "query": "from a_index | where versionField IS NULL", + "error": [], "warning": [] }, { - "query": "from index | drop stringField, numberField, dateField", + "query": "from a_index | where versionField IS null", "error": [], "warning": [] }, { - "query": "from index | drop 4.5", - "error": [ - "SyntaxError: token recognition error at: '4'", - "SyntaxError: token recognition error at: '5'", - "SyntaxError: missing ID_PATTERN at '.'", - "SyntaxError: missing ID_PATTERN at ''" - ], + "query": "from a_index | where versionField is null", + "error": [], "warning": [] }, { - "query": "from index | drop missingField, numberField, dateField", - "error": [ - "Unknown column [missingField]" - ], + "query": "from a_index | where versionField is NULL", + "error": [], "warning": [] }, { - "query": "from index | drop `any#Char$Field`", + "query": "from a_index | where versionField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from index | drop s*", + "query": "from a_index | where versionField IS NOT null", "error": [], "warning": [] }, { - "query": "from index | drop s**Field", + "query": "from a_index | where versionField IS not NULL", "error": [], "warning": [] }, { - "query": "from index | drop *Field*", + "query": "from a_index | where versionField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from index | drop s*F*d", + "query": "from a_index | where ipField IS NULL", "error": [], "warning": [] }, { - "query": "from index | drop *Field", + "query": "from a_index | where ipField IS null", "error": [], "warning": [] }, { - "query": "from index | drop s*Field", + "query": "from a_index | where ipField is null", "error": [], "warning": [] }, { - "query": "from index | drop string*Field", + "query": "from a_index | where ipField is NULL", "error": [], "warning": [] }, { - "query": "from index | drop s*, n*", + "query": "from a_index | where ipField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from index | drop m*", - "error": [ - "Unknown column [m*]" - ], + "query": "from a_index | where ipField IS NOT null", + "error": [], "warning": [] }, { - "query": "from index | drop *m", - "error": [ - "Unknown column [*m]" - ], + "query": "from a_index | where ipField IS not NULL", + "error": [], "warning": [] }, { - "query": "from index | drop d*m", - "error": [ - "Unknown column [d*m]" - ], + "query": "from a_index | where ipField Is nOt NuLL", + "error": [], "warning": [] }, { - "query": "from index | drop *", - "error": [ - "Removing all fields is not allowed [*]" - ], + "query": "from a_index | where stringField IS NULL", + "error": [], "warning": [] }, { - "query": "from index | drop stringField, *", - "error": [ - "Removing all fields is not allowed [*]" - ], + "query": "from a_index | where stringField IS null", + "error": [], "warning": [] }, { - "query": "from index | drop @timestamp", + "query": "from a_index | where stringField is null", "error": [], - "warning": [ - "Drop [@timestamp] will remove all time filters to the search results" - ] + "warning": [] }, { - "query": "from index | drop stringField, @timestamp", + "query": "from a_index | where stringField is NULL", "error": [], - "warning": [ - "Drop [@timestamp] will remove all time filters to the search results" - ] + "warning": [] }, { - "query": "FROM index | STATS ROUND(AVG(numberField * 1.5)), COUNT(*), MIN(numberField * 10) | DROP `MIN(numberField * 10)`", + "query": "from a_index | where stringField IS NOT NULL", "error": [], "warning": [] }, { - "query": "FROM index | STATS COUNT(*), MIN(numberField * 10), MAX(numberField)| DROP `COUNT(*)`", + "query": "from a_index | where stringField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | mv_expand ", - "error": [ - "SyntaxError: missing {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER} at ''" - ], + "query": "from a_index | where stringField IS not NULL", + "error": [], "warning": [] }, { - "query": "from a_index | mv_expand stringField", + "query": "from a_index | where stringField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | mv_expand numberField", + "query": "from a_index | where cartesianPointField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | mv_expand dateField", + "query": "from a_index | where cartesianPointField IS null", "error": [], "warning": [] }, { - "query": "from a_index | mv_expand booleanField", + "query": "from a_index | where cartesianPointField is null", "error": [], "warning": [] }, { - "query": "from a_index | mv_expand ipField", + "query": "from a_index | where cartesianPointField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | mv_expand numberField, b", - "error": [ - "SyntaxError: token recognition error at: ','", - "SyntaxError: extraneous input 'b' expecting " - ], + "query": "from a_index | where cartesianPointField IS NOT NULL", + "error": [], "warning": [] }, { - "query": "row a = \"a\" | mv_expand a", + "query": "from a_index | where cartesianPointField IS NOT null", "error": [], "warning": [] }, { - "query": "row a = [1, 2, 3] | mv_expand a", + "query": "from a_index | where cartesianPointField IS not NULL", "error": [], "warning": [] }, { - "query": "row a = [true, false] | mv_expand a", + "query": "from a_index | where cartesianPointField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "row a = [\"a\", \"b\"] | mv_expand a", + "query": "from a_index | where cartesianShapeField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | rename", - "error": [ - "SyntaxError: mismatched input '' expecting ID_PATTERN" - ], + "query": "from a_index | where cartesianShapeField IS null", + "error": [], "warning": [] }, { - "query": "from a_index | rename stringField", - "error": [ - "SyntaxError: mismatched input '' expecting 'as'" - ], + "query": "from a_index | where cartesianShapeField is null", + "error": [], "warning": [] }, { - "query": "from a_index | rename a", - "error": [ - "SyntaxError: mismatched input '' expecting 'as'", - "Unknown column [a]" - ], + "query": "from a_index | where cartesianShapeField is NULL", + "error": [], "warning": [] }, { - "query": "from a_index | rename stringField as", - "error": [ - "SyntaxError: missing ID_PATTERN at ''" - ], + "query": "from a_index | where cartesianShapeField IS NOT NULL", + "error": [], "warning": [] }, { - "query": "from a_index | rename missingField as", - "error": [ - "SyntaxError: missing ID_PATTERN at ''", - "Unknown column [missingField]" - ], + "query": "from a_index | where cartesianShapeField IS NOT null", + "error": [], "warning": [] }, { - "query": "from a_index | rename stringField as b", + "query": "from a_index | where cartesianShapeField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | rename stringField AS b", + "query": "from a_index | where cartesianShapeField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "from a_index | rename stringField As b", + "query": "from a_index | where geoPointField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | rename stringField As b, b AS c", + "query": "from a_index | where geoPointField IS null", "error": [], "warning": [] }, { - "query": "from a_index | rename fn() as a", - "error": [ - "SyntaxError: token recognition error at: '('", - "SyntaxError: token recognition error at: ')'", - "Unknown column [fn]", - "Unknown column [a]" - ], + "query": "from a_index | where geoPointField is null", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField + 1 | rename `numberField + 1` as a", + "query": "from a_index | where geoPointField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) | rename `avg(numberField)` as avg0", + "query": "from a_index | where geoPointField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index |eval numberField + 1 | rename `numberField + 1` as ", - "error": [ - "SyntaxError: missing ID_PATTERN at ''" - ], + "query": "from a_index | where geoPointField IS NOT null", + "error": [], "warning": [] }, { - "query": "from a_index | rename s* as strings", - "error": [ - "Using wildcards (*) in RENAME is not allowed [s*]", - "Unknown column [strings]" - ], + "query": "from a_index | where geoPointField IS not NULL", + "error": [], "warning": [] }, { - "query": "row a = 10 | rename a as `this``is fine`", + "query": "from a_index | where geoPointField Is nOt NuLL", "error": [], "warning": [] }, { - "query": "row a = 10 | rename a as this is fine", - "error": [ - "SyntaxError: mismatched input 'is' expecting " - ], + "query": "from a_index | where geoShapeField IS NULL", + "error": [], "warning": [] }, { - "query": "from a_index | dissect", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | where geoShapeField IS null", + "error": [], "warning": [] }, { - "query": "from a_index | dissect stringField", - "error": [ - "SyntaxError: missing QUOTED_STRING at ''" - ], + "query": "from a_index | where geoShapeField is null", + "error": [], "warning": [] }, { - "query": "from a_index | dissect stringField 2", - "error": [ - "SyntaxError: mismatched input '2' expecting QUOTED_STRING" - ], + "query": "from a_index | where geoShapeField is NULL", + "error": [], "warning": [] }, { - "query": "from a_index | dissect stringField .", - "error": [ - "SyntaxError: mismatched input '' expecting {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "Unknown column [stringField.]" - ], + "query": "from a_index | where geoShapeField IS NOT NULL", + "error": [], "warning": [] }, { - "query": "from a_index | dissect stringField %a", - "error": [ - "SyntaxError: mismatched input '%' expecting QUOTED_STRING", - "SyntaxError: mismatched input '' expecting '='" - ], + "query": "from a_index | where geoShapeField IS NOT null", + "error": [], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\"", + "query": "from a_index | where geoShapeField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | dissect numberField \"%{firstWord}\"", - "error": [ - "DISSECT only supports string type values, found [numberField] of type [number]" - ], + "query": "from a_index | where geoShapeField Is nOt NuLL", + "error": [], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" option ", - "error": [ - "SyntaxError: mismatched input '' expecting '='" - ], + "query": "from a_index | where stringField == \"a\" or null", + "error": [], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" option = ", + "query": "from a_index | eval ", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', 'null', '?', 'true', '+', '-', OPENING_BRACKET}", - "Invalid option for DISSECT: [option]" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" option = 1", - "error": [ - "Invalid option for DISSECT: [option]" - ], + "query": "from a_index | eval stringField ", + "error": [], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" append_separator = \"-\"", + "query": "from a_index | eval b = stringField", "error": [], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" ignore_missing = true", - "error": [ - "Invalid option for DISSECT: [ignore_missing]" - ], + "query": "from a_index | eval numberField + 1", + "error": [], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" append_separator = true", + "query": "from a_index | eval numberField + ", "error": [ - "Invalid value for DISSECT append_separator: expected a string, but was [true]" + "SyntaxError: no viable alternative at input 'numberField + '" ], "warning": [] }, { - "query": "from a_index | dissect stringField \"%{firstWord}\" | keep firstWord", - "error": [], - "warning": [] - }, - { - "query": "from a_index | grok", + "query": "from a_index | eval stringField + 1", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "Argument of [+] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | grok stringField", + "query": "from a_index | eval a=b", "error": [ - "SyntaxError: missing QUOTED_STRING at ''" + "Unknown column [b]" ], "warning": [] }, { - "query": "from a_index | grok stringField 2", + "query": "from a_index | eval a=b, ", "error": [ - "SyntaxError: mismatched input '2' expecting QUOTED_STRING" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "Unknown column [b]" ], "warning": [] }, { - "query": "from a_index | grok stringField .", + "query": "from a_index | eval a=round", "error": [ - "SyntaxError: mismatched input '' expecting {UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "Unknown column [stringField.]" + "Unknown column [round]" ], "warning": [] }, { - "query": "from a_index | grok stringField %a", + "query": "from a_index | eval a=round(", "error": [ - "SyntaxError: mismatched input '%' expecting QUOTED_STRING" + "SyntaxError: no viable alternative at input 'round('" ], "warning": [] }, { - "query": "from a_index | grok stringField \"%{firstWord}\"", + "query": "from a_index | eval a=round(numberField) ", "error": [], "warning": [] }, { - "query": "from a_index | grok numberField \"%{firstWord}\"", + "query": "from a_index | eval a=round(numberField), ", "error": [ - "GROK only supports string type values, found [numberField] of type [number]" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | grok stringField \"%{firstWord}\" | keep firstWord", + "query": "from a_index | eval a=round(numberField) + round(numberField) ", "error": [], "warning": [] }, { - "query": "from a_index | where b", + "query": "from a_index | eval a=round(numberField) + round(stringField) ", "error": [ - "Unknown column [b]" + "Argument of [round] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | where true", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where NOT true", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where false", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where NOT false", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where 1 > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where NOT 1 > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where +1 > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where NOT +1 > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where 1 * 1 > 0", - "error": [], + "query": "from a_index | eval a=round(numberField) + round(stringField), numberField ", + "error": [ + "Argument of [round] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where NOT 1 * 1 > 0", + "query": "from a_index | eval a=round(numberField) + round(numberField), numberField ", "error": [], "warning": [] }, { - "query": "from a_index | where -1 > 0", + "query": "from a_index | eval a=round(numberField) + round(numberField), b = numberField ", "error": [], "warning": [] }, { - "query": "from a_index | where NOT -1 > 0", + "query": "from a_index | eval a=[1, 2, 3]", "error": [], "warning": [] }, { - "query": "from a_index | where 1 / 1 > 0", + "query": "from a_index | eval a=[true, false]", "error": [], "warning": [] }, { - "query": "from a_index | where NOT 1 / 1 > 0", + "query": "from a_index | eval a=[\"a\", \"b\"]", "error": [], "warning": [] }, { - "query": "from a_index | where 1.0 > 0", + "query": "from a_index | eval a=null", "error": [], "warning": [] }, { - "query": "from a_index | where NOT 1.0 > 0", + "query": "from a_index | eval numberField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where 1.5 > 0", + "query": "from a_index | eval numberField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where NOT 1.5 > 0", + "query": "from a_index | eval numberField is null", "error": [], "warning": [] }, { - "query": "from a_index | where numberField > 0", + "query": "from a_index | eval numberField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField > 0", + "query": "from a_index | eval numberField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField > 0)", + "query": "from a_index | eval numberField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField > 0))", + "query": "from a_index | eval numberField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where 1 > 0", + "query": "from a_index | eval dateField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField > stringField", + "query": "from a_index | eval dateField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where numberField > numberField", + "query": "from a_index | eval dateField is null", "error": [], "warning": [] }, { - "query": "from a_index | where dateField > dateField", + "query": "from a_index | eval dateField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField > booleanField", - "error": [ - "Argument of [>] must be [number], found value [booleanField] type [boolean]", - "Argument of [>] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval dateField IS NOT NULL", + "error": [], "warning": [] }, { - "query": "from a_index | where ipField > ipField", + "query": "from a_index | eval dateField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where numberField >= 0", + "query": "from a_index | eval dateField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField >= 0", + "query": "from a_index | eval booleanField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField >= 0)", + "query": "from a_index | eval booleanField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField >= 0))", + "query": "from a_index | eval booleanField is null", "error": [], "warning": [] }, { - "query": "from a_index | where 1 >= 0", + "query": "from a_index | eval booleanField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField >= stringField", + "query": "from a_index | eval booleanField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField >= numberField", + "query": "from a_index | eval booleanField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where dateField >= dateField", + "query": "from a_index | eval booleanField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField >= booleanField", - "error": [ - "Argument of [>=] must be [number], found value [booleanField] type [boolean]", - "Argument of [>=] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval versionField IS NULL", + "error": [], "warning": [] }, { - "query": "from a_index | where ipField >= ipField", + "query": "from a_index | eval versionField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where numberField < 0", + "query": "from a_index | eval versionField is null", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField < 0", + "query": "from a_index | eval versionField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField < 0)", + "query": "from a_index | eval versionField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField < 0))", + "query": "from a_index | eval versionField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where 1 < 0", + "query": "from a_index | eval versionField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where stringField < stringField", + "query": "from a_index | eval ipField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField < numberField", + "query": "from a_index | eval ipField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where dateField < dateField", + "query": "from a_index | eval ipField is null", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField < booleanField", - "error": [ - "Argument of [<] must be [number], found value [booleanField] type [boolean]", - "Argument of [<] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval ipField is NULL", + "error": [], "warning": [] }, { - "query": "from a_index | where ipField < ipField", + "query": "from a_index | eval ipField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField <= 0", + "query": "from a_index | eval ipField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField <= 0", + "query": "from a_index | eval ipField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField <= 0)", + "query": "from a_index | eval stringField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField <= 0))", + "query": "from a_index | eval stringField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where 1 <= 0", + "query": "from a_index | eval stringField is null", "error": [], "warning": [] }, { - "query": "from a_index | where stringField <= stringField", + "query": "from a_index | eval stringField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField <= numberField", + "query": "from a_index | eval stringField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField <= dateField", + "query": "from a_index | eval stringField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField <= booleanField", - "error": [ - "Argument of [<=] must be [number], found value [booleanField] type [boolean]", - "Argument of [<=] must be [number], found value [booleanField] type [boolean]" - ], + "query": "from a_index | eval stringField IS not NULL", + "error": [], "warning": [] }, { - "query": "from a_index | where ipField <= ipField", + "query": "from a_index | eval cartesianPointField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField == 0", + "query": "from a_index | eval cartesianPointField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField == 0", + "query": "from a_index | eval cartesianPointField is null", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField == 0)", + "query": "from a_index | eval cartesianPointField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField == 0))", + "query": "from a_index | eval cartesianPointField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where 1 == 0", + "query": "from a_index | eval cartesianPointField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where stringField == stringField", + "query": "from a_index | eval cartesianPointField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField == numberField", + "query": "from a_index | eval cartesianShapeField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField == dateField", + "query": "from a_index | eval cartesianShapeField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField == booleanField", + "query": "from a_index | eval cartesianShapeField is null", "error": [], "warning": [] }, { - "query": "from a_index | where ipField == ipField", + "query": "from a_index | eval cartesianShapeField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where numberField != 0", + "query": "from a_index | eval cartesianShapeField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField != 0", + "query": "from a_index | eval cartesianShapeField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where (numberField != 0)", + "query": "from a_index | eval cartesianShapeField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField != 0))", + "query": "from a_index | eval geoPointField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where 1 != 0", + "query": "from a_index | eval geoPointField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where stringField != stringField", + "query": "from a_index | eval geoPointField is null", "error": [], "warning": [] }, { - "query": "from a_index | where numberField != numberField", + "query": "from a_index | eval geoPointField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where dateField != dateField", + "query": "from a_index | eval geoPointField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField != booleanField", + "query": "from a_index | eval geoPointField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where ipField != ipField", + "query": "from a_index | eval geoPointField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where - numberField > 0", + "query": "from a_index | eval geoShapeField IS NULL", "error": [], "warning": [] }, { - "query": "from a_index | where - round(numberField) > 0", + "query": "from a_index | eval geoShapeField IS null", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + - numberField > 0", + "query": "from a_index | eval geoShapeField is null", "error": [], "warning": [] }, { - "query": "from a_index | where 1 - numberField > 0", + "query": "from a_index | eval geoShapeField is NULL", "error": [], "warning": [] }, { - "query": "from a_index | where - numberField > 0", + "query": "from a_index | eval geoShapeField IS NOT NULL", "error": [], "warning": [] }, { - "query": "from a_index | where - round(numberField) > 0", + "query": "from a_index | eval geoShapeField IS NOT null", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + - numberField > 0", + "query": "from a_index | eval geoShapeField IS not NULL", "error": [], "warning": [] }, { - "query": "from a_index | where 1 - numberField > 0", + "query": "from a_index | eval - numberField", "error": [], "warning": [] }, { - "query": "from a_index | where + numberField > 0", + "query": "from a_index | eval a=- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where + round(numberField) > 0", + "query": "from a_index | eval a=- round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + + numberField > 0", + "query": "from a_index | eval 1 + - numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + numberField > 0", + "query": "from a_index | eval 1 - numberField", "error": [], "warning": [] }, { - "query": "from a_index | where + numberField > 0", + "query": "from a_index | eval - numberField", "error": [], "warning": [] }, { - "query": "from a_index | where + round(numberField) > 0", + "query": "from a_index | eval a=- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + + numberField > 0", + "query": "from a_index | eval a=- round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + numberField > 0", + "query": "from a_index | eval 1 + - numberField", "error": [], "warning": [] }, { - "query": "from a_index | where not booleanField", + "query": "from a_index | eval 1 - numberField", "error": [], "warning": [] }, { - "query": "from a_index | where -- numberField > 0", + "query": "from a_index | eval + numberField", "error": [], "warning": [] }, { - "query": "from a_index | where -- round(numberField) > 0", + "query": "from a_index | eval a=+ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + -- numberField > 0", + "query": "from a_index | eval a=+ round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where 1 -- numberField > 0", + "query": "from a_index | eval 1 + + numberField", "error": [], "warning": [] }, { - "query": "from a_index | where -+ numberField > 0", + "query": "from a_index | eval 1 + numberField", "error": [], "warning": [] }, { - "query": "from a_index | where -+ round(numberField) > 0", + "query": "from a_index | eval + numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + -+ numberField > 0", + "query": "from a_index | eval a=+ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 -+ numberField > 0", + "query": "from a_index | eval a=+ round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where +- numberField > 0", + "query": "from a_index | eval 1 + + numberField", "error": [], "warning": [] }, { - "query": "from a_index | where +- round(numberField) > 0", + "query": "from a_index | eval 1 + numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + +- numberField > 0", + "query": "from a_index | eval not booleanField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 +- numberField > 0", + "query": "from a_index | eval -- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where ++ numberField > 0", + "query": "from a_index | eval a=-- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where ++ round(numberField) > 0", + "query": "from a_index | eval a=-- round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + ++ numberField > 0", + "query": "from a_index | eval 1 + -- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 ++ numberField > 0", + "query": "from a_index | eval 1 -- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where not not booleanField", + "query": "from a_index | eval -+ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where --- numberField > 0", + "query": "from a_index | eval a=-+ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where --- round(numberField) > 0", + "query": "from a_index | eval a=-+ round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + --- numberField > 0", + "query": "from a_index | eval 1 + -+ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 --- numberField > 0", + "query": "from a_index | eval 1 -+ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where -+- numberField > 0", + "query": "from a_index | eval +- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where -+- round(numberField) > 0", + "query": "from a_index | eval a=+- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + -+- numberField > 0", + "query": "from a_index | eval a=+- round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where 1 -+- numberField > 0", + "query": "from a_index | eval 1 + +- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where +-+ numberField > 0", + "query": "from a_index | eval 1 +- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where +-+ round(numberField) > 0", + "query": "from a_index | eval ++ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + +-+ numberField > 0", + "query": "from a_index | eval a=++ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 +-+ numberField > 0", + "query": "from a_index | eval a=++ round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where +++ numberField > 0", + "query": "from a_index | eval 1 + ++ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where +++ round(numberField) > 0", + "query": "from a_index | eval 1 ++ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + +++ numberField > 0", + "query": "from a_index | eval not not booleanField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 +++ numberField > 0", + "query": "from a_index | eval --- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where not not not booleanField", + "query": "from a_index | eval a=--- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where ---- numberField > 0", + "query": "from a_index | eval a=--- round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where ---- round(numberField) > 0", + "query": "from a_index | eval 1 + --- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + ---- numberField > 0", + "query": "from a_index | eval 1 --- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 ---- numberField > 0", + "query": "from a_index | eval -+- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where -+-+ numberField > 0", + "query": "from a_index | eval a=-+- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where -+-+ round(numberField) > 0", + "query": "from a_index | eval a=-+- round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + -+-+ numberField > 0", + "query": "from a_index | eval 1 + -+- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 -+-+ numberField > 0", + "query": "from a_index | eval 1 -+- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where +-+- numberField > 0", + "query": "from a_index | eval +-+ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where +-+- round(numberField) > 0", + "query": "from a_index | eval a=+-+ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + +-+- numberField > 0", + "query": "from a_index | eval a=+-+ round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where 1 +-+- numberField > 0", + "query": "from a_index | eval 1 + +-+ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where ++++ numberField > 0", + "query": "from a_index | eval 1 +-+ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where ++++ round(numberField) > 0", + "query": "from a_index | eval +++ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 + ++++ numberField > 0", + "query": "from a_index | eval a=+++ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where 1 ++++ numberField > 0", + "query": "from a_index | eval a=+++ round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where not not not not booleanField", + "query": "from a_index | eval 1 + +++ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where *+ numberField", - "error": [ - "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | eval 1 +++ numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where /+ numberField", - "error": [ - "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | eval not not not booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | where %+ numberField", - "error": [ - "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | eval ---- numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where numberField =~ 0", - "error": [ - "Argument of [=~] must be [string], found value [numberField] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" - ], + "query": "from a_index | eval a=---- numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField =~ 0", - "error": [ - "Argument of [=~] must be [string], found value [numberField] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" - ], + "query": "from a_index | eval a=---- round(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | where (numberField =~ 0)", - "error": [ - "Argument of [=~] must be [string], found value [numberField] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" - ], + "query": "from a_index | eval 1 + ---- numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where (NOT (numberField =~ 0))", - "error": [ - "Argument of [=~] must be [string], found value [numberField] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" - ], + "query": "from a_index | eval 1 ---- numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where 1 =~ 0", - "error": [ - "Argument of [=~] must be [string], found value [1] type [number]", - "Argument of [=~] must be [string], found value [0] type [number]" - ], + "query": "from a_index | eval -+-+ numberField", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField =~ 0", - "error": [ - "Argument of [=~] must be [string], found value [0] type [number]" - ], + "query": "from a_index | eval a=-+-+ numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where stringField like \"?a\"", + "query": "from a_index | eval a=-+-+ round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where stringField NOT like \"?a\"", + "query": "from a_index | eval 1 + -+-+ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where NOT stringField like \"?a\"", + "query": "from a_index | eval 1 -+-+ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where NOT stringField NOT like \"?a\"", + "query": "from a_index | eval +-+- numberField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField like \"?a\"", - "error": [ - "Argument of [like] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval a=+-+- numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where numberField NOT like \"?a\"", - "error": [ - "Argument of [not_like] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval a=+-+- round(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField like \"?a\"", - "error": [ - "Argument of [like] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval 1 + +-+- numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField NOT like \"?a\"", - "error": [ - "Argument of [not_like] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval 1 +-+- numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where stringField rlike \"?a\"", + "query": "from a_index | eval ++++ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where stringField NOT rlike \"?a\"", + "query": "from a_index | eval a=++++ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where NOT stringField rlike \"?a\"", + "query": "from a_index | eval a=++++ round(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | where NOT stringField NOT rlike \"?a\"", + "query": "from a_index | eval 1 + ++++ numberField", "error": [], "warning": [] }, { - "query": "from a_index | where numberField rlike \"?a\"", - "error": [ - "Argument of [rlike] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval 1 ++++ numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where numberField NOT rlike \"?a\"", - "error": [ - "Argument of [not_rlike] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval not not not not booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | where NOT numberField rlike \"?a\"", + "query": "from a_index | eval *+ numberField", "error": [ - "Argument of [rlike] must be [string], found value [numberField] type [number]" + "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | where NOT numberField NOT rlike \"?a\"", + "query": "from a_index | eval /+ numberField", "error": [ - "Argument of [not_rlike] must be [string], found value [numberField] type [number]" + "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | where cidr_match(ipField)", + "query": "from a_index | eval %+ numberField", "error": [ - "Error: [cidr_match] function expects at least 2 arguments, got 1." + "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval cidr = \"172.0.0.1/30\" | where cidr_match(ipField, \"172.0.0.1/30\", cidr)", + "query": "from a_index | eval log10(-1)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1" + ] }, { - "query": "from a_index | where numberField IS NULL", + "query": "from a_index | eval log(-1)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1" + ] }, { - "query": "from a_index | where numberField IS null", + "query": "from a_index | eval log(-1, 20)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1" + ] }, { - "query": "from a_index | where numberField is null", + "query": "from a_index | eval log(-1, -20)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1", + "Log of a negative number results in null: -20" + ] }, { - "query": "from a_index | where numberField is NULL", + "query": "from a_index | eval var0 = log(-1, -20)", "error": [], - "warning": [] + "warning": [ + "Log of a negative number results in null: -1", + "Log of a negative number results in null: -20" + ] }, { - "query": "from a_index | where numberField IS NOT NULL", + "query": "from a_index | eval numberField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where numberField IS NOT null", + "query": "from a_index | eval NOT numberField > 0", "error": [], "warning": [] }, { - "query": "from a_index | where numberField IS not NULL", + "query": "from a_index | eval (numberField > 0)", "error": [], "warning": [] }, { - "query": "from a_index | where numberField Is nOt NuLL", + "query": "from a_index | eval (NOT (numberField > 0))", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS NULL", + "query": "from a_index | eval 1 > 0", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS null", + "query": "from a_index | eval stringField > stringField", "error": [], "warning": [] }, { - "query": "from a_index | where dateField is null", + "query": "from a_index | eval numberField > numberField", "error": [], "warning": [] }, { - "query": "from a_index | where dateField is NULL", + "query": "from a_index | eval dateField > dateField", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS NOT NULL", - "error": [], + "query": "from a_index | eval booleanField > booleanField", + "error": [ + "Argument of [>] must be [number], found value [booleanField] type [boolean]", + "Argument of [>] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | where dateField IS NOT null", + "query": "from a_index | eval ipField > ipField", "error": [], "warning": [] }, { - "query": "from a_index | where dateField IS not NULL", - "error": [], + "query": "from a_index | eval numberField > stringField", + "error": [ + "Argument of [>] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where dateField Is nOt NuLL", - "error": [], + "query": "from a_index | eval stringField > numberField", + "error": [ + "Argument of [>] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where booleanField IS NULL", - "error": [], + "query": "from a_index | eval numberField > \"2022\"", + "error": [ + "Argument of [>] must be [number], found value [\"2022\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | where booleanField IS null", - "error": [], + "query": "from a_index | eval dateField > stringField", + "error": [ + "Argument of [>] must be [string], found value [dateField] type [date]" + ], "warning": [] }, { - "query": "from a_index | where booleanField is null", - "error": [], + "query": "from a_index | eval stringField > dateField", + "error": [ + "Argument of [>] must be [string], found value [dateField] type [date]" + ], "warning": [] }, { - "query": "from a_index | where booleanField is NULL", - "error": [], + "query": "from a_index | eval stringField > 0", + "error": [ + "Argument of [>] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where booleanField IS NOT NULL", - "error": [], + "query": "from a_index | eval stringField > now()", + "error": [ + "Argument of [>] must be [string], found value [now()] type [date]" + ], "warning": [] }, { - "query": "from a_index | where booleanField IS NOT null", + "query": "from a_index | eval dateField > \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField IS not NULL", + "query": "from a_index | eval \"2022\" > dateField", "error": [], "warning": [] }, { - "query": "from a_index | where booleanField Is nOt NuLL", + "query": "from a_index | eval versionField > \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS NULL", + "query": "from a_index | eval \"1.2.3\" > versionField", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS null", - "error": [], + "query": "from a_index | eval booleanField > \"true\"", + "error": [ + "Argument of [>] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | where versionField is null", - "error": [], + "query": "from a_index | eval \"true\" > booleanField", + "error": [ + "Argument of [>] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | where versionField is NULL", + "query": "from a_index | eval ipField > \"136.36.3.205\"", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS NOT NULL", + "query": "from a_index | eval \"136.36.3.205\" > ipField", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS NOT null", + "query": "from a_index | eval numberField >= 0", "error": [], "warning": [] }, { - "query": "from a_index | where versionField IS not NULL", + "query": "from a_index | eval NOT numberField >= 0", "error": [], "warning": [] }, { - "query": "from a_index | where versionField Is nOt NuLL", + "query": "from a_index | eval (numberField >= 0)", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS NULL", + "query": "from a_index | eval (NOT (numberField >= 0))", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS null", + "query": "from a_index | eval 1 >= 0", "error": [], "warning": [] }, { - "query": "from a_index | where ipField is null", + "query": "from a_index | eval stringField >= stringField", "error": [], "warning": [] }, { - "query": "from a_index | where ipField is NULL", + "query": "from a_index | eval numberField >= numberField", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS NOT NULL", + "query": "from a_index | eval dateField >= dateField", "error": [], "warning": [] }, { - "query": "from a_index | where ipField IS NOT null", - "error": [], + "query": "from a_index | eval booleanField >= booleanField", + "error": [ + "Argument of [>=] must be [number], found value [booleanField] type [boolean]", + "Argument of [>=] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | where ipField IS not NULL", + "query": "from a_index | eval ipField >= ipField", "error": [], "warning": [] }, { - "query": "from a_index | where ipField Is nOt NuLL", - "error": [], + "query": "from a_index | eval numberField >= stringField", + "error": [ + "Argument of [>=] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where stringField IS NULL", - "error": [], + "query": "from a_index | eval stringField >= numberField", + "error": [ + "Argument of [>=] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where stringField IS null", - "error": [], + "query": "from a_index | eval numberField >= \"2022\"", + "error": [ + "Argument of [>=] must be [number], found value [\"2022\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | where stringField is null", - "error": [], + "query": "from a_index | eval dateField >= stringField", + "error": [ + "Argument of [>=] must be [string], found value [dateField] type [date]" + ], "warning": [] }, { - "query": "from a_index | where stringField is NULL", - "error": [], + "query": "from a_index | eval stringField >= dateField", + "error": [ + "Argument of [>=] must be [string], found value [dateField] type [date]" + ], "warning": [] }, { - "query": "from a_index | where stringField IS NOT NULL", - "error": [], + "query": "from a_index | eval stringField >= 0", + "error": [ + "Argument of [>=] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where stringField IS NOT null", - "error": [], + "query": "from a_index | eval stringField >= now()", + "error": [ + "Argument of [>=] must be [string], found value [now()] type [date]" + ], "warning": [] }, { - "query": "from a_index | where stringField IS not NULL", + "query": "from a_index | eval dateField >= \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | where stringField Is nOt NuLL", + "query": "from a_index | eval \"2022\" >= dateField", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS NULL", + "query": "from a_index | eval versionField >= \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS null", + "query": "from a_index | eval \"1.2.3\" >= versionField", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField is null", - "error": [], + "query": "from a_index | eval booleanField >= \"true\"", + "error": [ + "Argument of [>=] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | where cartesianPointField is NULL", - "error": [], + "query": "from a_index | eval \"true\" >= booleanField", + "error": [ + "Argument of [>=] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS NOT NULL", + "query": "from a_index | eval ipField >= \"136.36.3.205\"", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS NOT null", + "query": "from a_index | eval \"136.36.3.205\" >= ipField", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField IS not NULL", + "query": "from a_index | eval numberField < 0", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianPointField Is nOt NuLL", + "query": "from a_index | eval NOT numberField < 0", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS NULL", + "query": "from a_index | eval (numberField < 0)", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS null", + "query": "from a_index | eval (NOT (numberField < 0))", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField is null", + "query": "from a_index | eval 1 < 0", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField is NULL", + "query": "from a_index | eval stringField < stringField", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS NOT NULL", + "query": "from a_index | eval numberField < numberField", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS NOT null", + "query": "from a_index | eval dateField < dateField", "error": [], "warning": [] }, { - "query": "from a_index | where cartesianShapeField IS not NULL", - "error": [], + "query": "from a_index | eval booleanField < booleanField", + "error": [ + "Argument of [<] must be [number], found value [booleanField] type [boolean]", + "Argument of [<] must be [number], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | where cartesianShapeField Is nOt NuLL", + "query": "from a_index | eval ipField < ipField", "error": [], "warning": [] }, { - "query": "from a_index | where geoPointField IS NULL", - "error": [], + "query": "from a_index | eval numberField < stringField", + "error": [ + "Argument of [<] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where geoPointField IS null", - "error": [], + "query": "from a_index | eval stringField < numberField", + "error": [ + "Argument of [<] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where geoPointField is null", - "error": [], + "query": "from a_index | eval numberField < \"2022\"", + "error": [ + "Argument of [<] must be [number], found value [\"2022\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | where geoPointField is NULL", - "error": [], + "query": "from a_index | eval dateField < stringField", + "error": [ + "Argument of [<] must be [string], found value [dateField] type [date]" + ], "warning": [] }, { - "query": "from a_index | where geoPointField IS NOT NULL", - "error": [], + "query": "from a_index | eval stringField < dateField", + "error": [ + "Argument of [<] must be [string], found value [dateField] type [date]" + ], "warning": [] }, { - "query": "from a_index | where geoPointField IS NOT null", - "error": [], + "query": "from a_index | eval stringField < 0", + "error": [ + "Argument of [<] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where geoPointField IS not NULL", - "error": [], + "query": "from a_index | eval stringField < now()", + "error": [ + "Argument of [<] must be [string], found value [now()] type [date]" + ], "warning": [] }, { - "query": "from a_index | where geoPointField Is nOt NuLL", + "query": "from a_index | eval dateField < \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS NULL", + "query": "from a_index | eval \"2022\" < dateField", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS null", + "query": "from a_index | eval versionField < \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField is null", + "query": "from a_index | eval \"1.2.3\" < versionField", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField is NULL", - "error": [], + "query": "from a_index | eval booleanField < \"true\"", + "error": [ + "Argument of [<] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | where geoShapeField IS NOT NULL", - "error": [], + "query": "from a_index | eval \"true\" < booleanField", + "error": [ + "Argument of [<] must be [string], found value [booleanField] type [boolean]" + ], "warning": [] }, { - "query": "from a_index | where geoShapeField IS NOT null", + "query": "from a_index | eval ipField < \"136.36.3.205\"", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField IS not NULL", + "query": "from a_index | eval \"136.36.3.205\" < ipField", "error": [], "warning": [] }, { - "query": "from a_index | where geoShapeField Is nOt NuLL", + "query": "from a_index | eval numberField <= 0", "error": [], "warning": [] }, { - "query": "from a_index | where stringField == \"a\" or null", + "query": "from a_index | eval NOT numberField <= 0", "error": [], "warning": [] }, { - "query": "from a_index | where avg(numberField)", - "error": [ - "WHERE does not support function avg" - ], + "query": "from a_index | eval (numberField <= 0)", + "error": [], "warning": [] }, { - "query": "from a_index | where avg(numberField) > 0", - "error": [ - "WHERE does not support function avg" - ], + "query": "from a_index | eval (NOT (numberField <= 0))", + "error": [], "warning": [] }, { - "query": "from a_index | where sum(numberField)", - "error": [ - "WHERE does not support function sum" - ], + "query": "from a_index | eval 1 <= 0", + "error": [], "warning": [] }, { - "query": "from a_index | where sum(numberField) > 0", - "error": [ - "WHERE does not support function sum" - ], + "query": "from a_index | eval stringField <= stringField", + "error": [], "warning": [] }, { - "query": "from a_index | where median(numberField)", - "error": [ - "WHERE does not support function median" - ], + "query": "from a_index | eval numberField <= numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where median(numberField) > 0", - "error": [ - "WHERE does not support function median" - ], + "query": "from a_index | eval dateField <= dateField", + "error": [], "warning": [] }, { - "query": "from a_index | where median_absolute_deviation(numberField)", + "query": "from a_index | eval booleanField <= booleanField", "error": [ - "WHERE does not support function median_absolute_deviation" + "Argument of [<=] must be [number], found value [booleanField] type [boolean]", + "Argument of [<=] must be [number], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where median_absolute_deviation(numberField) > 0", - "error": [ - "WHERE does not support function median_absolute_deviation" - ], + "query": "from a_index | eval ipField <= ipField", + "error": [], "warning": [] }, { - "query": "from a_index | where percentile(numberField, 5)", + "query": "from a_index | eval numberField <= stringField", "error": [ - "WHERE does not support function percentile" + "Argument of [<=] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | where percentile(numberField, 5) > 0", + "query": "from a_index | eval stringField <= numberField", "error": [ - "WHERE does not support function percentile" + "Argument of [<=] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | where max(numberField)", + "query": "from a_index | eval numberField <= \"2022\"", "error": [ - "WHERE does not support function max" + "Argument of [<=] must be [number], found value [\"2022\"] type [string]" ], "warning": [] }, { - "query": "from a_index | where max(numberField) > 0", + "query": "from a_index | eval dateField <= stringField", "error": [ - "WHERE does not support function max" + "Argument of [<=] must be [string], found value [dateField] type [date]" ], "warning": [] }, { - "query": "from a_index | where max(dateField)", + "query": "from a_index | eval stringField <= dateField", "error": [ - "WHERE does not support function max" + "Argument of [<=] must be [string], found value [dateField] type [date]" ], "warning": [] }, { - "query": "from a_index | where max(dateField) > 0", + "query": "from a_index | eval stringField <= 0", "error": [ - "WHERE does not support function max" + "Argument of [<=] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | where min(numberField)", + "query": "from a_index | eval stringField <= now()", "error": [ - "WHERE does not support function min" + "Argument of [<=] must be [string], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | where min(numberField) > 0", - "error": [ - "WHERE does not support function min" - ], + "query": "from a_index | eval dateField <= \"2022\"", + "error": [], "warning": [] }, { - "query": "from a_index | where min(dateField)", - "error": [ - "WHERE does not support function min" - ], + "query": "from a_index | eval \"2022\" <= dateField", + "error": [], "warning": [] }, { - "query": "from a_index | where min(dateField) > 0", - "error": [ - "WHERE does not support function min" - ], + "query": "from a_index | eval versionField <= \"1.2.3\"", + "error": [], "warning": [] }, { - "query": "from a_index | where count(stringField)", - "error": [ - "WHERE does not support function count" - ], + "query": "from a_index | eval \"1.2.3\" <= versionField", + "error": [], "warning": [] }, { - "query": "from a_index | where count(stringField) > 0", + "query": "from a_index | eval booleanField <= \"true\"", "error": [ - "WHERE does not support function count" + "Argument of [<=] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where count_distinct(stringField, numberField)", + "query": "from a_index | eval \"true\" <= booleanField", "error": [ - "WHERE does not support function count_distinct" + "Argument of [<=] must be [string], found value [booleanField] type [boolean]" ], "warning": [] }, { - "query": "from a_index | where count_distinct(stringField, numberField) > 0", - "error": [ - "WHERE does not support function count_distinct" - ], + "query": "from a_index | eval ipField <= \"136.36.3.205\"", + "error": [], "warning": [] }, { - "query": "from a_index | where abs(numberField) > 0", + "query": "from a_index | eval \"136.36.3.205\" <= ipField", "error": [], "warning": [] }, { - "query": "from a_index | where abs(stringField) > 0", - "error": [ - "Argument of [abs] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval numberField == 0", + "error": [], "warning": [] }, { - "query": "from a_index | where acos(numberField) > 0", + "query": "from a_index | eval NOT numberField == 0", "error": [], "warning": [] }, { - "query": "from a_index | where acos(stringField) > 0", - "error": [ - "Argument of [acos] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval (numberField == 0)", + "error": [], "warning": [] }, { - "query": "from a_index | where asin(numberField) > 0", + "query": "from a_index | eval (NOT (numberField == 0))", "error": [], "warning": [] }, { - "query": "from a_index | where asin(stringField) > 0", - "error": [ - "Argument of [asin] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval 1 == 0", + "error": [], "warning": [] }, { - "query": "from a_index | where atan(numberField) > 0", + "query": "from a_index | eval stringField == stringField", "error": [], "warning": [] }, { - "query": "from a_index | where atan(stringField) > 0", - "error": [ - "Argument of [atan] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval numberField == numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where atan2(numberField, numberField) > 0", + "query": "from a_index | eval dateField == dateField", "error": [], "warning": [] }, { - "query": "from a_index | where atan2(stringField, stringField) > 0", - "error": [ - "Argument of [atan2] must be [number], found value [stringField] type [string]", - "Argument of [atan2] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval booleanField == booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | where ceil(numberField) > 0", + "query": "from a_index | eval ipField == ipField", "error": [], "warning": [] }, { - "query": "from a_index | where ceil(stringField) > 0", + "query": "from a_index | eval numberField == stringField", "error": [ - "Argument of [ceil] must be [number], found value [stringField] type [string]" + "Argument of [==] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | where length(concat(stringField, stringField)) > 0", - "error": [], + "query": "from a_index | eval stringField == numberField", + "error": [ + "Argument of [==] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where length(concat(numberField, numberField)) > 0", + "query": "from a_index | eval numberField == \"2022\"", "error": [ - "Argument of [concat] must be [string], found value [numberField] type [number]" + "Argument of [==] must be [number], found value [\"2022\"] type [string]" ], "warning": [] }, { - "query": "from a_index | where cos(numberField) > 0", - "error": [], + "query": "from a_index | eval dateField == stringField", + "error": [ + "Argument of [==] must be [string], found value [dateField] type [date]" + ], "warning": [] }, { - "query": "from a_index | where cos(stringField) > 0", + "query": "from a_index | eval stringField == dateField", "error": [ - "Argument of [cos] must be [number], found value [stringField] type [string]" + "Argument of [==] must be [string], found value [dateField] type [date]" ], "warning": [] }, { - "query": "from a_index | where cosh(numberField) > 0", - "error": [], + "query": "from a_index | eval stringField == 0", + "error": [ + "Argument of [==] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where cosh(stringField) > 0", + "query": "from a_index | eval stringField == now()", "error": [ - "Argument of [cosh] must be [number], found value [stringField] type [string]" + "Argument of [==] must be [string], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | where e() > 0", + "query": "from a_index | eval dateField == \"2022\"", "error": [], "warning": [] }, { - "query": "from a_index | where e() > 0", + "query": "from a_index | eval \"2022\" == dateField", "error": [], "warning": [] }, { - "query": "from a_index | where floor(numberField) > 0", + "query": "from a_index | eval versionField == \"1.2.3\"", "error": [], "warning": [] }, { - "query": "from a_index | where floor(stringField) > 0", - "error": [ - "Argument of [floor] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | where length(left(stringField, numberField)) > 0", + "query": "from a_index | eval \"1.2.3\" == versionField", "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 booleanField == \"true\"", + "error": [], "warning": [] }, { - "query": "from a_index | where length(stringField) > 0", + "query": "from a_index | eval \"true\" == 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 ipField == \"136.36.3.205\"", + "error": [], "warning": [] }, { - "query": "from a_index | where log(numberField, numberField) > 0", + "query": "from a_index | eval \"136.36.3.205\" == ipField", "error": [], "warning": [] }, { - "query": "from a_index | where log(stringField, stringField) > 0", - "error": [ - "Argument of [log] must be [number], found value [stringField] type [string]", - "Argument of [log] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval numberField != 0", + "error": [], "warning": [] }, { - "query": "from a_index | where log10(numberField) > 0", + "query": "from a_index | eval NOT numberField != 0", "error": [], "warning": [] }, { - "query": "from a_index | where log10(stringField) > 0", - "error": [ - "Argument of [log10] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval (numberField != 0)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(ltrim(stringField)) > 0", + "query": "from a_index | eval (NOT (numberField != 0))", "error": [], "warning": [] }, { - "query": "from a_index | where length(ltrim(numberField)) > 0", - "error": [ - "Argument of [ltrim] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval 1 != 0", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_avg(numberField) > 0", + "query": "from a_index | eval stringField != stringField", "error": [], "warning": [] }, { - "query": "from a_index | where mv_avg(stringField) > 0", - "error": [ - "Argument of [mv_avg] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval numberField != numberField", + "error": [], "warning": [] }, { - "query": "from a_index | where length(mv_concat(stringField, stringField)) > 0", + "query": "from a_index | eval dateField != dateField", "error": [], "warning": [] }, { - "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]" - ], + "query": "from a_index | eval booleanField != booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | where mv_median(numberField) > 0", + "query": "from a_index | eval ipField != ipField", "error": [], "warning": [] }, { - "query": "from a_index | where mv_median(stringField) > 0", + "query": "from a_index | eval numberField != stringField", "error": [ - "Argument of [mv_median] must be [number], found value [stringField] type [string]" + "Argument of [!=] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | where mv_sum(numberField) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where mv_sum(stringField) > 0", + "query": "from a_index | eval stringField != numberField", "error": [ - "Argument of [mv_sum] must be [number], found value [stringField] type [string]" + "Argument of [!=] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | where length(mv_zip(stringField, stringField, stringField)) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where length(mv_zip(numberField, numberField, numberField)) > 0", + "query": "from a_index | eval numberField != \"2022\"", "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 [!=] must be [number], found value [\"2022\"] type [string]" ], "warning": [] }, { - "query": "from a_index | where pi() > 0", - "error": [], + "query": "from a_index | eval dateField != stringField", + "error": [ + "Argument of [!=] must be [string], found value [dateField] type [date]" + ], "warning": [] }, { - "query": "from a_index | where pi() > 0", - "error": [], + "query": "from a_index | eval stringField != dateField", + "error": [ + "Argument of [!=] must be [string], found value [dateField] type [date]" + ], "warning": [] }, - { - "query": "from a_index | where pow(numberField, numberField) > 0", - "error": [], + { + "query": "from a_index | eval stringField != 0", + "error": [ + "Argument of [!=] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | where pow(stringField, stringField) > 0", + "query": "from a_index | eval stringField != now()", "error": [ - "Argument of [pow] must be [number], found value [stringField] type [string]", - "Argument of [pow] must be [number], found value [stringField] type [string]" + "Argument of [!=] must be [string], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | where length(replace(stringField, stringField, stringField)) > 0", + "query": "from a_index | eval dateField != \"2022\"", "error": [], "warning": [] }, { - "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]" - ], + "query": "from a_index | eval \"2022\" != dateField", + "error": [], "warning": [] }, { - "query": "from a_index | where length(right(stringField, numberField)) > 0", + "query": "from a_index | eval versionField != \"1.2.3\"", "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]" - ], + "query": "from a_index | eval \"1.2.3\" != versionField", + "error": [], "warning": [] }, { - "query": "from a_index | where round(numberField, numberField) > 0", + "query": "from a_index | eval booleanField != \"true\"", "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 \"true\" != booleanField", + "error": [], "warning": [] }, { - "query": "from a_index | where length(rtrim(stringField)) > 0", + "query": "from a_index | eval ipField != \"136.36.3.205\"", "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 \"136.36.3.205\" != ipField", + "error": [], "warning": [] }, { - "query": "from a_index | where signum(numberField) > 0", + "query": "from a_index | eval versionField in (\"1.2.3\", \"4.5.6\", to_version(\"2.3.2\"))", "error": [], "warning": [] }, { - "query": "from a_index | where signum(stringField) > 0", - "error": [ - "Argument of [signum] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval dateField in (\"2023-12-12\", \"2024-12-12\", date_parse(\"yyyy-MM-dd\", \"2025-12-12\"))", + "error": [], "warning": [] }, { - "query": "from a_index | where sin(numberField) > 0", + "query": "from a_index | eval booleanField in (\"true\", \"false\", false)", "error": [], "warning": [] }, { - "query": "from a_index | where sin(stringField) > 0", - "error": [ - "Argument of [sin] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval ipField in (\"136.36.3.205\", \"136.36.3.206\", to_ip(\"136.36.3.207\"))", + "error": [], "warning": [] }, { - "query": "from a_index | where sinh(numberField) > 0", + "query": "from a_index | eval numberField + 1", "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 (numberField + 1)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(split(stringField, stringField)) > 0", + "query": "from a_index | eval 1 + 1", "error": [], "warning": [] }, { - "query": "from a_index | where length(split(numberField, numberField)) > 0", + "query": "from a_index | eval now() + now()", "error": [ - "Argument of [split] must be [string], found value [numberField] type [number]", - "Argument of [split] must be [string], found value [numberField] type [number]" + "Argument of [+] must be [time_literal], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | where sqrt(numberField) > 0", - "error": [], + "query": "from a_index | eval 1 + \"1\"", + "error": [ + "Argument of [+] must be [number], found value [\"1\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | where sqrt(stringField) > 0", + "query": "from a_index | eval \"1\" + 1", "error": [ - "Argument of [sqrt] must be [number], found value [stringField] type [string]" + "Argument of [+] must be [number], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | where length(substring(stringField, numberField, numberField)) > 0", + "query": "from a_index | eval numberField - 1", "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": "from a_index | eval (numberField - 1)", + "error": [], "warning": [] }, { - "query": "from a_index | where tan(numberField) > 0", + "query": "from a_index | eval 1 - 1", "error": [], "warning": [] }, { - "query": "from a_index | where tan(stringField) > 0", + "query": "from a_index | eval now() - now()", "error": [ - "Argument of [tan] must be [number], found value [stringField] type [string]" + "Argument of [-] must be [time_literal], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | where tanh(numberField) > 0", - "error": [], + "query": "from a_index | eval 1 - \"1\"", + "error": [ + "Argument of [-] must be [number], found value [\"1\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | where tanh(stringField) > 0", + "query": "from a_index | eval \"1\" - 1", "error": [ - "Argument of [tanh] must be [number], found value [stringField] type [string]" + "Argument of [-] must be [number], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | where tau() > 0", + "query": "from a_index | eval numberField * 1", "error": [], "warning": [] }, { - "query": "from a_index | where tau() > 0", + "query": "from a_index | eval (numberField * 1)", "error": [], "warning": [] }, { - "query": "from a_index | where to_degrees(numberField) > 0", + "query": "from a_index | eval 1 * 1", "error": [], "warning": [] }, { - "query": "from a_index | where to_degrees(stringField) > 0", + "query": "from a_index | eval now() * now()", "error": [ - "Argument of [to_degrees] must be [number], found value [stringField] type [string]" + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | where length(to_lower(stringField)) > 0", - "error": [], + "query": "from a_index | eval 1 * \"1\"", + "error": [ + "Argument of [*] must be [number], found value [\"1\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | where length(to_lower(numberField)) > 0", + "query": "from a_index | eval \"1\" * 1", "error": [ - "Argument of [to_lower] must be [string], found value [numberField] type [number]" + "Argument of [*] must be [number], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | where to_radians(numberField) > 0", + "query": "from a_index | eval numberField / 1", "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": "from a_index | eval (numberField / 1)", + "error": [], "warning": [] }, { - "query": "from a_index | where length(to_upper(stringField)) > 0", + "query": "from a_index | eval 1 / 1", "error": [], "warning": [] }, { - "query": "from a_index | where length(to_upper(numberField)) > 0", + "query": "from a_index | eval now() / now()", "error": [ - "Argument of [to_upper] must be [string], found value [numberField] type [number]" + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | where length(trim(stringField)) > 0", - "error": [], - "warning": [] - }, - { - "query": "from a_index | where length(trim(numberField)) > 0", + "query": "from a_index | eval 1 / \"1\"", "error": [ - "Argument of [trim] must be [string], found value [numberField] type [number]" + "Argument of [/] must be [number], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval ", + "query": "from a_index | eval \"1\" / 1", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "Argument of [/] must be [number], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval stringField ", + "query": "from a_index | eval numberField % 1", "error": [], "warning": [] }, { - "query": "from a_index | eval b = stringField", + "query": "from a_index | eval (numberField % 1)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField + 1", + "query": "from a_index | eval 1 % 1", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField + ", + "query": "from a_index | eval now() % now()", "error": [ - "SyntaxError: no viable alternative at input 'numberField + '" + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [now()] type [date]" ], "warning": [] }, { - "query": "from a_index | eval stringField + 1", + "query": "from a_index | eval 1 % \"1\"", "error": [ - "Argument of [+] must be [number], found value [stringField] type [string]" + "Argument of [%] must be [number], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval a=b", + "query": "from a_index | eval \"1\" % 1", "error": [ - "Unknown column [b]" + "Argument of [%] must be [number], found value [\"1\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval a=b, ", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "Unknown column [b]" - ], - "warning": [] + "query": "from a_index | eval 1/0", + "error": [], + "warning": [ + "Cannot divide by zero: 1/0" + ] }, { - "query": "from a_index | eval a=round", - "error": [ - "Unknown column [round]" - ], - "warning": [] + "query": "from a_index | eval var = 1/0", + "error": [], + "warning": [ + "Cannot divide by zero: 1/0" + ] }, { - "query": "from a_index | eval a=round(", - "error": [ - "SyntaxError: no viable alternative at input 'round('" - ], - "warning": [] + "query": "from a_index | eval 1 + 1/0", + "error": [], + "warning": [ + "Cannot divide by zero: 1/0" + ] }, { - "query": "from a_index | eval a=round(numberField) ", + "query": "from a_index | eval 1%0", "error": [], - "warning": [] + "warning": [ + "Module by zero can return null value: 1%0" + ] }, { - "query": "from a_index | eval a=round(numberField), ", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], - "warning": [] + "query": "from a_index | eval var = 1%0", + "error": [], + "warning": [ + "Module by zero can return null value: 1%0" + ] }, { - "query": "from a_index | eval a=round(numberField) + round(numberField) ", + "query": "from a_index | eval 1 + 1%0", "error": [], - "warning": [] + "warning": [ + "Module by zero can return null value: 1%0" + ] }, { - "query": "from a_index | eval a=round(numberField) + round(stringField) ", - "error": [ - "Argument of [round] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval stringField like \"?a\"", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) + round(stringField), numberField ", - "error": [ - "Argument of [round] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval stringField NOT like \"?a\"", + "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) + round(numberField), numberField ", + "query": "from a_index | eval NOT stringField like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval a=round(numberField) + round(numberField), b = numberField ", + "query": "from a_index | eval NOT stringField NOT like \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval a=[1, 2, 3]", - "error": [], + "query": "from a_index | eval numberField like \"?a\"", + "error": [ + "Argument of [like] must be [string], found value [numberField] type [number]" + ], + "warning": [] + }, + { + "query": "from a_index | eval numberField NOT like \"?a\"", + "error": [ + "Argument of [not_like] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | eval a=[true, false]", - "error": [], + "query": "from a_index | eval NOT numberField like \"?a\"", + "error": [ + "Argument of [like] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | eval a=[\"a\", \"b\"]", - "error": [], + "query": "from a_index | eval NOT numberField NOT like \"?a\"", + "error": [ + "Argument of [not_like] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | eval a=null", + "query": "from a_index | eval stringField rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField IS NULL", + "query": "from a_index | eval stringField NOT rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField IS null", + "query": "from a_index | eval NOT stringField rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField is null", + "query": "from a_index | eval NOT stringField NOT rlike \"?a\"", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField is NULL", - "error": [], + "query": "from a_index | eval numberField rlike \"?a\"", + "error": [ + "Argument of [rlike] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | eval numberField IS NOT NULL", - "error": [], + "query": "from a_index | eval numberField NOT rlike \"?a\"", + "error": [ + "Argument of [not_rlike] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | eval numberField IS NOT null", - "error": [], + "query": "from a_index | eval NOT numberField rlike \"?a\"", + "error": [ + "Argument of [rlike] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | eval numberField IS not NULL", - "error": [], + "query": "from a_index | eval NOT numberField NOT rlike \"?a\"", + "error": [ + "Argument of [not_rlike] must be [string], found value [numberField] type [number]" + ], "warning": [] }, { - "query": "from a_index | eval dateField IS NULL", + "query": "from a_index | eval 1 in (1, 2, 3)", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS null", + "query": "from a_index | eval numberField in (1, 2, 3)", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField is null", + "query": "from a_index | eval numberField not in (1, 2, 3)", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField is NULL", + "query": "from a_index | eval numberField not in (1, 2, 3, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS NOT NULL", + "query": "from a_index | eval 1 in (1, 2, 3, round(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS NOT null", + "query": "from a_index | eval \"a\" in (\"a\", \"b\", \"c\")", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField IS not NULL", + "query": "from a_index | eval stringField in (\"a\", \"b\", \"c\")", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS NULL", + "query": "from a_index | eval stringField not in (\"a\", \"b\", \"c\")", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS null", + "query": "from a_index | eval stringField not in (\"a\", \"b\", \"c\", stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField is null", + "query": "from a_index | eval 1 in (\"a\", \"b\", \"c\")", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField is NULL", + "query": "from a_index | eval numberField in (\"a\", \"b\", \"c\")", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS NOT NULL", + "query": "from a_index | eval numberField not in (\"a\", \"b\", \"c\")", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS NOT null", + "query": "from a_index | eval numberField not in (1, 2, 3, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField IS not NULL", - "error": [], + "query": "from a_index | eval avg(numberField)", + "error": [ + "EVAL does not support function avg" + ], "warning": [] }, { - "query": "from a_index | eval versionField IS NULL", + "query": "from a_index | stats avg(numberField) | eval `avg(numberField)` + 1", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField IS null", - "error": [], + "query": "from a_index | eval not", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", + "Error: [not] function expects exactly one argument, got 0." + ], "warning": [] }, { - "query": "from a_index | eval versionField is null", - "error": [], + "query": "from a_index | eval in", + "error": [ + "SyntaxError: mismatched input 'in' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + ], "warning": [] }, { - "query": "from a_index | eval versionField is NULL", - "error": [], + "query": "from a_index | eval stringField in stringField", + "error": [ + "SyntaxError: missing '(' at 'stringField'", + "SyntaxError: mismatched input '' expecting {',', ')'}" + ], "warning": [] }, { - "query": "from a_index | eval versionField IS NOT NULL", - "error": [], + "query": "from a_index | eval stringField in stringField)", + "error": [ + "SyntaxError: missing '(' at 'stringField'", + "Error: [in] function expects exactly 2 arguments, got 1." + ], "warning": [] }, { - "query": "from a_index | eval versionField IS NOT null", - "error": [], + "query": "from a_index | eval stringField not in stringField", + "error": [ + "SyntaxError: missing '(' at 'stringField'", + "SyntaxError: mismatched input '' expecting {',', ')'}" + ], "warning": [] }, { - "query": "from a_index | eval versionField IS not NULL", + "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"bogus\")", "error": [], - "warning": [] + "warning": [ + "Invalid option [\"bogus\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." + ] }, { - "query": "from a_index | eval ipField IS NULL", + "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"ASC\")", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS null", + "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"DESC\")", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField is null", + "query": "from a_index | eval result = case(false, 0, 1), round(result)", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField is NULL", + "query": "from a_index | eval result = case(false, 0, 1) | stats sum(result)", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS NOT NULL", + "query": "from a_index | eval result = case(false, 0, 1) | stats var0 = sum(result)", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS NOT null", + "query": "from a_index | eval round(case(false, 0, 1))", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField IS not NULL", - "error": [], + "query": "from a_index | eval 1 anno", + "error": [ + "EVAL does not support [date_period] in expression [1 anno]" + ], "warning": [] }, { - "query": "from a_index | eval stringField IS NULL", - "error": [], + "query": "from a_index | eval var = 1 anno", + "error": [ + "Unexpected time interval qualifier: 'anno'" + ], "warning": [] }, { - "query": "from a_index | eval stringField IS null", - "error": [], + "query": "from a_index | eval now() + 1 anno", + "error": [ + "Unexpected time interval qualifier: 'anno'" + ], "warning": [] }, { - "query": "from a_index | eval stringField is null", - "error": [], + "query": "from a_index | eval 1 year", + "error": [ + "EVAL does not support [date_period] in expression [1 year]" + ], "warning": [] }, { - "query": "from a_index | eval stringField is NULL", - "error": [], + "query": "from a_index | eval 1 year", + "error": [ + "EVAL does not support [date_period] in expression [1 year]" + ], "warning": [] }, { - "query": "from a_index | eval stringField IS NOT NULL", + "query": "from a_index | eval var = now() - 1 year", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField IS NOT null", + "query": "from a_index | eval var = dateField - 1 year", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField IS not NULL", + "query": "from a_index | eval var = dateField - 1 YEAR", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS NULL", + "query": "from a_index | eval var = dateField - 1 Year", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS null", + "query": "from a_index | eval var = dateField + 1 year", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianPointField is null", - "error": [], + "query": "from a_index | eval 1 year + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 year] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval cartesianPointField is NULL", - "error": [], + "query": "from a_index | eval var = now() * 1 year", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 year] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS NOT NULL", - "error": [], + "query": "from a_index | eval var = now() / 1 year", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 year] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS NOT null", - "error": [], + "query": "from a_index | eval var = now() % 1 year", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 year] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval cartesianPointField IS not NULL", - "error": [], + "query": "from a_index | eval 1 years", + "error": [ + "EVAL does not support [date_period] in expression [1 years]" + ], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS NULL", - "error": [], + "query": "from a_index | eval 1 years", + "error": [ + "EVAL does not support [date_period] in expression [1 years]" + ], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS null", + "query": "from a_index | eval var = now() - 1 years", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField is null", + "query": "from a_index | eval var = dateField - 1 years", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField is NULL", + "query": "from a_index | eval var = dateField - 1 YEARS", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS NOT NULL", + "query": "from a_index | eval var = dateField - 1 Years", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS NOT null", + "query": "from a_index | eval var = dateField + 1 years", "error": [], "warning": [] }, { - "query": "from a_index | eval cartesianShapeField IS not NULL", - "error": [], + "query": "from a_index | eval 1 years + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 years] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField IS NULL", - "error": [], + "query": "from a_index | eval var = now() * 1 years", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 years] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField IS null", - "error": [], + "query": "from a_index | eval var = now() / 1 years", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 years] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField is null", - "error": [], + "query": "from a_index | eval var = now() % 1 years", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 years] type [duration]" + ], "warning": [] }, - { - "query": "from a_index | eval geoPointField is NULL", - "error": [], + { + "query": "from a_index | eval 1 month", + "error": [ + "EVAL does not support [date_period] in expression [1 month]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField IS NOT NULL", - "error": [], + "query": "from a_index | eval 1 month", + "error": [ + "EVAL does not support [date_period] in expression [1 month]" + ], "warning": [] }, { - "query": "from a_index | eval geoPointField IS NOT null", + "query": "from a_index | eval var = now() - 1 month", "error": [], "warning": [] }, { - "query": "from a_index | eval geoPointField IS not NULL", + "query": "from a_index | eval var = dateField - 1 month", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS NULL", + "query": "from a_index | eval var = dateField - 1 MONTH", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS null", + "query": "from a_index | eval var = dateField - 1 Month", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField is null", + "query": "from a_index | eval var = dateField + 1 month", "error": [], "warning": [] }, { - "query": "from a_index | eval geoShapeField is NULL", - "error": [], + "query": "from a_index | eval 1 month + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 month] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS NOT NULL", - "error": [], + "query": "from a_index | eval var = now() * 1 month", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 month] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS NOT null", - "error": [], + "query": "from a_index | eval var = now() / 1 month", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 month] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval geoShapeField IS not NULL", - "error": [], + "query": "from a_index | eval var = now() % 1 month", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 month] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval - numberField", - "error": [], + "query": "from a_index | eval 1 months", + "error": [ + "EVAL does not support [date_period] in expression [1 months]" + ], "warning": [] }, { - "query": "from a_index | eval a=- numberField", - "error": [], + "query": "from a_index | eval 1 months", + "error": [ + "EVAL does not support [date_period] in expression [1 months]" + ], "warning": [] }, { - "query": "from a_index | eval a=- round(numberField)", + "query": "from a_index | eval var = now() - 1 months", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + - numberField", + "query": "from a_index | eval var = dateField - 1 months", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 - numberField", + "query": "from a_index | eval var = dateField - 1 MONTHS", "error": [], "warning": [] }, { - "query": "from a_index | eval - numberField", + "query": "from a_index | eval var = dateField - 1 Months", "error": [], "warning": [] }, { - "query": "from a_index | eval a=- numberField", + "query": "from a_index | eval var = dateField + 1 months", "error": [], "warning": [] }, { - "query": "from a_index | eval a=- round(numberField)", - "error": [], + "query": "from a_index | eval 1 months + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 months] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval 1 + - numberField", - "error": [], + "query": "from a_index | eval var = now() * 1 months", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 months] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval 1 - numberField", - "error": [], + "query": "from a_index | eval var = now() / 1 months", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 months] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval + numberField", - "error": [], + "query": "from a_index | eval var = now() % 1 months", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 months] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval a=+ numberField", - "error": [], + "query": "from a_index | eval 1 week", + "error": [ + "EVAL does not support [date_period] in expression [1 week]" + ], "warning": [] }, { - "query": "from a_index | eval a=+ round(numberField)", - "error": [], + "query": "from a_index | eval 1 week", + "error": [ + "EVAL does not support [date_period] in expression [1 week]" + ], "warning": [] }, { - "query": "from a_index | eval 1 + + numberField", + "query": "from a_index | eval var = now() - 1 week", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + numberField", + "query": "from a_index | eval var = dateField - 1 week", "error": [], "warning": [] }, { - "query": "from a_index | eval + numberField", + "query": "from a_index | eval var = dateField - 1 WEEK", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+ numberField", + "query": "from a_index | eval var = dateField - 1 Week", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+ round(numberField)", + "query": "from a_index | eval var = dateField + 1 week", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + + numberField", - "error": [], + "query": "from a_index | eval 1 week + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 week] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval 1 + numberField", - "error": [], + "query": "from a_index | eval var = now() * 1 week", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 week] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval not booleanField", - "error": [], + "query": "from a_index | eval var = now() / 1 week", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 week] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval -- numberField", - "error": [], + "query": "from a_index | eval var = now() % 1 week", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 week] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval a=-- numberField", - "error": [], + "query": "from a_index | eval 1 weeks", + "error": [ + "EVAL does not support [date_period] in expression [1 weeks]" + ], "warning": [] }, { - "query": "from a_index | eval a=-- round(numberField)", - "error": [], + "query": "from a_index | eval 1 weeks", + "error": [ + "EVAL does not support [date_period] in expression [1 weeks]" + ], "warning": [] }, { - "query": "from a_index | eval 1 + -- numberField", + "query": "from a_index | eval var = now() - 1 weeks", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 -- numberField", + "query": "from a_index | eval var = dateField - 1 weeks", "error": [], "warning": [] }, { - "query": "from a_index | eval -+ numberField", + "query": "from a_index | eval var = dateField - 1 WEEKS", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+ numberField", + "query": "from a_index | eval var = dateField - 1 Weeks", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+ round(numberField)", + "query": "from a_index | eval var = dateField + 1 weeks", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + -+ numberField", - "error": [], + "query": "from a_index | eval 1 weeks + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 weeks] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval 1 -+ numberField", - "error": [], + "query": "from a_index | eval var = now() * 1 weeks", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 weeks] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval +- numberField", - "error": [], + "query": "from a_index | eval var = now() / 1 weeks", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 weeks] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval a=+- numberField", - "error": [], + "query": "from a_index | eval var = now() % 1 weeks", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 weeks] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval a=+- round(numberField)", - "error": [], + "query": "from a_index | eval 1 day", + "error": [ + "EVAL does not support [date_period] in expression [1 day]" + ], "warning": [] }, { - "query": "from a_index | eval 1 + +- numberField", - "error": [], + "query": "from a_index | eval 1 day", + "error": [ + "EVAL does not support [date_period] in expression [1 day]" + ], "warning": [] }, { - "query": "from a_index | eval 1 +- numberField", + "query": "from a_index | eval var = now() - 1 day", "error": [], "warning": [] }, { - "query": "from a_index | eval ++ numberField", + "query": "from a_index | eval var = dateField - 1 day", "error": [], "warning": [] }, { - "query": "from a_index | eval a=++ numberField", + "query": "from a_index | eval var = dateField - 1 DAY", "error": [], "warning": [] }, { - "query": "from a_index | eval a=++ round(numberField)", + "query": "from a_index | eval var = dateField - 1 Day", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + ++ numberField", + "query": "from a_index | eval var = dateField + 1 day", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 ++ numberField", - "error": [], + "query": "from a_index | eval 1 day + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 day] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval not not booleanField", - "error": [], + "query": "from a_index | eval var = now() * 1 day", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 day] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval --- numberField", - "error": [], + "query": "from a_index | eval var = now() / 1 day", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 day] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval a=--- numberField", - "error": [], + "query": "from a_index | eval var = now() % 1 day", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 day] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval a=--- round(numberField)", - "error": [], + "query": "from a_index | eval 1 days", + "error": [ + "EVAL does not support [date_period] in expression [1 days]" + ], "warning": [] }, { - "query": "from a_index | eval 1 + --- numberField", - "error": [], + "query": "from a_index | eval 1 days", + "error": [ + "EVAL does not support [date_period] in expression [1 days]" + ], "warning": [] }, { - "query": "from a_index | eval 1 --- numberField", + "query": "from a_index | eval var = now() - 1 days", "error": [], "warning": [] }, { - "query": "from a_index | eval -+- numberField", + "query": "from a_index | eval var = dateField - 1 days", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+- numberField", + "query": "from a_index | eval var = dateField - 1 DAYS", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+- round(numberField)", + "query": "from a_index | eval var = dateField - 1 Days", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + -+- numberField", + "query": "from a_index | eval var = dateField + 1 days", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 -+- numberField", - "error": [], + "query": "from a_index | eval 1 days + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 days] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval +-+ numberField", - "error": [], + "query": "from a_index | eval var = now() * 1 days", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 days] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval a=+-+ numberField", - "error": [], + "query": "from a_index | eval var = now() / 1 days", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 days] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval a=+-+ round(numberField)", - "error": [], + "query": "from a_index | eval var = now() % 1 days", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 days] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval 1 + +-+ numberField", - "error": [], + "query": "from a_index | eval 1 hour", + "error": [ + "EVAL does not support [date_period] in expression [1 hour]" + ], "warning": [] }, { - "query": "from a_index | eval 1 +-+ numberField", - "error": [], + "query": "from a_index | eval 1 hour", + "error": [ + "EVAL does not support [date_period] in expression [1 hour]" + ], "warning": [] }, { - "query": "from a_index | eval +++ numberField", + "query": "from a_index | eval var = now() - 1 hour", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+++ numberField", + "query": "from a_index | eval var = dateField - 1 hour", "error": [], "warning": [] }, { - "query": "from a_index | eval a=+++ round(numberField)", + "query": "from a_index | eval var = dateField - 1 HOUR", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + +++ numberField", + "query": "from a_index | eval var = dateField - 1 Hour", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 +++ numberField", + "query": "from a_index | eval var = dateField + 1 hour", "error": [], "warning": [] }, { - "query": "from a_index | eval not not not booleanField", - "error": [], + "query": "from a_index | eval 1 hour + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 hour] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval ---- numberField", - "error": [], + "query": "from a_index | eval var = now() * 1 hour", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 hour] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval a=---- numberField", - "error": [], + "query": "from a_index | eval var = now() / 1 hour", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 hour] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval a=---- round(numberField)", - "error": [], + "query": "from a_index | eval var = now() % 1 hour", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 hour] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval 1 + ---- numberField", - "error": [], + "query": "from a_index | eval 1 hours", + "error": [ + "EVAL does not support [date_period] in expression [1 hours]" + ], "warning": [] }, { - "query": "from a_index | eval 1 ---- numberField", - "error": [], + "query": "from a_index | eval 1 hours", + "error": [ + "EVAL does not support [date_period] in expression [1 hours]" + ], "warning": [] }, { - "query": "from a_index | eval -+-+ numberField", + "query": "from a_index | eval var = now() - 1 hours", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+-+ numberField", + "query": "from a_index | eval var = dateField - 1 hours", "error": [], "warning": [] }, { - "query": "from a_index | eval a=-+-+ round(numberField)", + "query": "from a_index | eval var = dateField - 1 HOURS", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + -+-+ numberField", + "query": "from a_index | eval var = dateField - 1 Hours", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 -+-+ numberField", + "query": "from a_index | eval var = dateField + 1 hours", "error": [], "warning": [] }, { - "query": "from a_index | eval +-+- numberField", - "error": [], + "query": "from a_index | eval 1 hours + 1 year", + "error": [ + "Argument of [+] must be [date], found value [1 hours] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval a=+-+- numberField", - "error": [], + "query": "from a_index | eval var = now() * 1 hours", + "error": [ + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 hours] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval a=+-+- round(numberField)", - "error": [], + "query": "from a_index | eval var = now() / 1 hours", + "error": [ + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 hours] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval 1 + +-+- numberField", - "error": [], + "query": "from a_index | eval var = now() % 1 hours", + "error": [ + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 hours] type [duration]" + ], "warning": [] }, { - "query": "from a_index | eval 1 +-+- numberField", - "error": [], + "query": "from a_index | eval 1 minute", + "error": [ + "EVAL does not support [date_period] in expression [1 minute]" + ], "warning": [] }, { - "query": "from a_index | eval ++++ numberField", - "error": [], + "query": "from a_index | eval 1 minute", + "error": [ + "EVAL does not support [date_period] in expression [1 minute]" + ], "warning": [] }, { - "query": "from a_index | eval a=++++ numberField", + "query": "from a_index | eval var = now() - 1 minute", "error": [], "warning": [] }, { - "query": "from a_index | eval a=++++ round(numberField)", + "query": "from a_index | eval var = dateField - 1 minute", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + ++++ numberField", + "query": "from a_index | eval var = dateField - 1 MINUTE", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 ++++ numberField", + "query": "from a_index | eval var = dateField - 1 Minute", "error": [], "warning": [] }, { - "query": "from a_index | eval not not not not booleanField", + "query": "from a_index | eval var = dateField + 1 minute", "error": [], "warning": [] }, { - "query": "from a_index | eval *+ numberField", + "query": "from a_index | eval 1 minute + 1 year", "error": [ - "SyntaxError: extraneous input '*' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "Argument of [+] must be [date], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval /+ numberField", + "query": "from a_index | eval var = now() * 1 minute", "error": [ - "SyntaxError: extraneous input '/' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval %+ numberField", + "query": "from a_index | eval var = now() / 1 minute", "error": [ - "SyntaxError: extraneous input '%' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = avg(numberField)", + "query": "from a_index | eval var = now() % 1 minute", "error": [ - "EVAL does not support function avg" + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 minute] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = avg(numberField) > 0", + "query": "from a_index | eval 1 minutes", "error": [ - "EVAL does not support function avg" + "EVAL does not support [date_period] in expression [1 minutes]" ], "warning": [] }, { - "query": "from a_index | eval avg(numberField)", + "query": "from a_index | eval 1 minutes", "error": [ - "EVAL does not support function avg" + "EVAL does not support [date_period] in expression [1 minutes]" ], "warning": [] }, { - "query": "from a_index | eval avg(numberField) > 0", - "error": [ - "EVAL does not support function avg" - ], + "query": "from a_index | eval var = now() - 1 minutes", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = sum(numberField)", + "query": "from a_index | eval var = dateField - 1 minutes", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = dateField - 1 MINUTES", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = dateField - 1 Minutes", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = dateField + 1 minutes", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval 1 minutes + 1 year", "error": [ - "EVAL does not support function sum" + "Argument of [+] must be [date], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = sum(numberField) > 0", + "query": "from a_index | eval var = now() * 1 minutes", "error": [ - "EVAL does not support function sum" + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval sum(numberField)", + "query": "from a_index | eval var = now() / 1 minutes", "error": [ - "EVAL does not support function sum" + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval sum(numberField) > 0", + "query": "from a_index | eval var = now() % 1 minutes", "error": [ - "EVAL does not support function sum" + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 minutes] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = median(numberField)", + "query": "from a_index | eval 1 second", "error": [ - "EVAL does not support function median" + "EVAL does not support [date_period] in expression [1 second]" ], "warning": [] }, { - "query": "from a_index | eval var = median(numberField) > 0", + "query": "from a_index | eval 1 second", "error": [ - "EVAL does not support function median" + "EVAL does not support [date_period] in expression [1 second]" ], "warning": [] }, { - "query": "from a_index | eval median(numberField)", - "error": [ - "EVAL does not support function median" - ], + "query": "from a_index | eval var = now() - 1 second", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = dateField - 1 second", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = dateField - 1 SECOND", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = dateField - 1 Second", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval var = dateField + 1 second", + "error": [], "warning": [] }, { - "query": "from a_index | eval median(numberField) > 0", + "query": "from a_index | eval 1 second + 1 year", "error": [ - "EVAL does not support function median" + "Argument of [+] must be [date], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = median_absolute_deviation(numberField)", + "query": "from a_index | eval var = now() * 1 second", "error": [ - "EVAL does not support function median_absolute_deviation" + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = median_absolute_deviation(numberField) > 0", + "query": "from a_index | eval var = now() / 1 second", "error": [ - "EVAL does not support function median_absolute_deviation" + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval median_absolute_deviation(numberField)", + "query": "from a_index | eval var = now() % 1 second", "error": [ - "EVAL does not support function median_absolute_deviation" + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 second] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval median_absolute_deviation(numberField) > 0", + "query": "from a_index | eval 1 seconds", "error": [ - "EVAL does not support function median_absolute_deviation" + "EVAL does not support [date_period] in expression [1 seconds]" ], "warning": [] }, { - "query": "from a_index | eval var = percentile(numberField, 5)", + "query": "from a_index | eval 1 seconds", "error": [ - "EVAL does not support function percentile" + "EVAL does not support [date_period] in expression [1 seconds]" ], "warning": [] }, { - "query": "from a_index | eval var = percentile(numberField, 5) > 0", - "error": [ - "EVAL does not support function percentile" - ], + "query": "from a_index | eval var = now() - 1 seconds", + "error": [], "warning": [] }, { - "query": "from a_index | eval percentile(numberField, 5)", - "error": [ - "EVAL does not support function percentile" - ], + "query": "from a_index | eval var = dateField - 1 seconds", + "error": [], "warning": [] }, { - "query": "from a_index | eval percentile(numberField, 5) > 0", - "error": [ - "EVAL does not support function percentile" - ], + "query": "from a_index | eval var = dateField - 1 SECONDS", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(numberField)", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = dateField - 1 Seconds", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = max(numberField) > 0", - "error": [ - "EVAL does not support function max" - ], + "query": "from a_index | eval var = dateField + 1 seconds", + "error": [], "warning": [] }, { - "query": "from a_index | eval max(numberField)", + "query": "from a_index | eval 1 seconds + 1 year", "error": [ - "EVAL does not support function max" + "Argument of [+] must be [date], found value [1 seconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval max(numberField) > 0", + "query": "from a_index | eval var = now() * 1 seconds", "error": [ - "EVAL does not support function max" + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 seconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = max(dateField)", + "query": "from a_index | eval var = now() / 1 seconds", "error": [ - "EVAL does not support function max" + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 seconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = max(dateField) > 0", + "query": "from a_index | eval var = now() % 1 seconds", "error": [ - "EVAL does not support function max" + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 seconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval max(dateField)", + "query": "from a_index | eval 1 millisecond", "error": [ - "EVAL does not support function max" + "EVAL does not support [date_period] in expression [1 millisecond]" ], "warning": [] }, { - "query": "from a_index | eval max(dateField) > 0", + "query": "from a_index | eval 1 millisecond", "error": [ - "EVAL does not support function max" + "EVAL does not support [date_period] in expression [1 millisecond]" ], "warning": [] }, { - "query": "from a_index | eval var = min(numberField)", - "error": [ - "EVAL does not support function min" - ], + "query": "from a_index | eval var = now() - 1 millisecond", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(numberField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "from a_index | eval var = dateField - 1 millisecond", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(numberField)", - "error": [ - "EVAL does not support function min" - ], + "query": "from a_index | eval var = dateField - 1 MILLISECOND", + "error": [], "warning": [] }, { - "query": "from a_index | eval min(numberField) > 0", - "error": [ - "EVAL does not support function min" - ], + "query": "from a_index | eval var = dateField - 1 Millisecond", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(dateField)", - "error": [ - "EVAL does not support function min" - ], + "query": "from a_index | eval var = dateField + 1 millisecond", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = min(dateField) > 0", + "query": "from a_index | eval 1 millisecond + 1 year", "error": [ - "EVAL does not support function min" + "Argument of [+] must be [date], found value [1 millisecond] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval min(dateField)", + "query": "from a_index | eval var = now() * 1 millisecond", "error": [ - "EVAL does not support function min" + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 millisecond] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval min(dateField) > 0", + "query": "from a_index | eval var = now() / 1 millisecond", "error": [ - "EVAL does not support function min" + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 millisecond] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = count(stringField)", + "query": "from a_index | eval var = now() % 1 millisecond", "error": [ - "EVAL does not support function count" + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 millisecond] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = count(stringField) > 0", + "query": "from a_index | eval 1 milliseconds", "error": [ - "EVAL does not support function count" + "EVAL does not support [date_period] in expression [1 milliseconds]" ], "warning": [] }, { - "query": "from a_index | eval count(stringField)", + "query": "from a_index | eval 1 milliseconds", "error": [ - "EVAL does not support function count" + "EVAL does not support [date_period] in expression [1 milliseconds]" ], "warning": [] }, { - "query": "from a_index | eval count(stringField) > 0", - "error": [ - "EVAL does not support function count" - ], + "query": "from a_index | eval var = now() - 1 milliseconds", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = count_distinct(stringField, numberField)", - "error": [ - "EVAL does not support function count_distinct" - ], + "query": "from a_index | eval var = dateField - 1 milliseconds", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = count_distinct(stringField, numberField) > 0", - "error": [ - "EVAL does not support function count_distinct" - ], + "query": "from a_index | eval var = dateField - 1 MILLISECONDS", + "error": [], "warning": [] }, { - "query": "from a_index | eval count_distinct(stringField, numberField)", - "error": [ - "EVAL does not support function count_distinct" - ], + "query": "from a_index | eval var = dateField - 1 Milliseconds", + "error": [], "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 = dateField + 1 milliseconds", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(cartesianPointField)", + "query": "from a_index | eval 1 milliseconds + 1 year", "error": [ - "EVAL does not support function st_centroid_agg" + "Argument of [+] must be [date], found value [1 milliseconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(cartesianPointField) > 0", + "query": "from a_index | eval var = now() * 1 milliseconds", "error": [ - "EVAL does not support function st_centroid_agg" + "Argument of [*] must be [number], found value [now()] type [date]", + "Argument of [*] must be [number], found value [1 milliseconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(cartesianPointField)", + "query": "from a_index | eval var = now() / 1 milliseconds", "error": [ - "EVAL does not support function st_centroid_agg" + "Argument of [/] must be [number], found value [now()] type [date]", + "Argument of [/] must be [number], found value [1 milliseconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(cartesianPointField) > 0", + "query": "from a_index | eval var = now() % 1 milliseconds", "error": [ - "EVAL does not support function st_centroid_agg" + "Argument of [%] must be [number], found value [now()] type [date]", + "Argument of [%] must be [number], found value [1 milliseconds] type [duration]" ], "warning": [] }, { - "query": "from a_index | eval var = st_centroid_agg(geoPointField)", + "query": "from a_index | stats ", "error": [ - "EVAL does not support function st_centroid_agg" + "At least one aggregation or grouping expression required in [STATS]" ], "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 | stats by stringField", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(geoPointField)", + "query": "from a_index | stats by ", "error": [ - "EVAL does not support function st_centroid_agg" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval st_centroid_agg(geoPointField) > 0", + "query": "from a_index | stats numberField ", "error": [ - "EVAL does not support function st_centroid_agg" + "Expected an aggregate function or group but got [numberField] of type [FieldAttribute]" ], "warning": [] }, { - "query": "from a_index | eval var = values(stringField)", + "query": "from a_index | stats numberField=", "error": [ - "EVAL does not support function values" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval var = values(stringField) > 0", + "query": "from a_index | stats numberField=5 by ", "error": [ - "EVAL does not support function values" + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval values(stringField)", + "query": "from a_index | stats avg(numberField) by wrongField", "error": [ - "EVAL does not support function values" + "Unknown column [wrongField]" ], "warning": [] }, { - "query": "from a_index | eval values(stringField) > 0", + "query": "from a_index | stats avg(numberField) by wrongField + 1", "error": [ - "EVAL does not support function values" + "Unknown column [wrongField]" ], "warning": [] }, { - "query": "from a_index | eval var = abs(numberField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval abs(numberField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = abs(to_integer(stringField))", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval abs(stringField)", + "query": "from a_index | stats avg(numberField) by var0 = wrongField + 1", "error": [ - "Argument of [abs] must be [number], found value [stringField] type [string]" + "Unknown column [wrongField]" ], "warning": [] }, { - "query": "from a_index | eval abs(numberField, extraArg)", - "error": [ - "Error: [abs] function expects exactly one argument, got 2." - ], + "query": "from a_index | stats avg(numberField) by 1", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = abs(*)", + "query": "from a_index | stats avg(numberField) by percentile(numberField)", "error": [ - "Using wildcards (*) in abs is not allowed" + "STATS BY does not support function percentile" ], "warning": [] }, { - "query": "from a_index | eval var = acos(numberField)", + "query": "from a_index | stats count(`numberField`)", "error": [], "warning": [] }, { - "query": "from a_index | eval acos(numberField)", + "query": "from a_index | stats count(stringField == \"a\" or null)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = acos(to_integer(stringField))", + "query": "from a_index | stats count(`numberField`) | keep `count(``numberField``)` ", "error": [], "warning": [] }, { - "query": "from a_index | eval acos(stringField)", - "error": [ - "Argument of [acos] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | stats count(`numberField`) | drop `count(``numberField``)` ", + "error": [], "warning": [] }, { - "query": "from a_index | eval acos(numberField, extraArg)", - "error": [ - "Error: [acos] function expects exactly one argument, got 2." - ], + "query": "from a_index | stats count(`numberField`) | eval `count(``numberField``)` ", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = acos(*)", + "query": "from a_index | stats avg(numberField) by stringField, percentile(numberField) by ipField", "error": [ - "Using wildcards (*) in acos is not allowed" + "SyntaxError: mismatched input 'by' expecting ", + "STATS BY does not support function percentile" ], "warning": [] }, { - "query": "from a_index | eval var = asin(numberField)", + "query": "from a_index | stats avg(numberField), percentile(numberField, 50) by ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval asin(numberField)", + "query": "from a_index | stats avg(numberField), percentile(numberField, 50) BY ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = asin(to_integer(stringField))", + "query": "from a_index | stats avg(numberField) + percentile(numberField, 50) BY ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval asin(stringField)", - "error": [ - "Argument of [asin] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval asin(numberField, extraArg)", - "error": [ - "Error: [asin] function expects exactly one argument, got 2." - ], + "query": "from a_index | stats avg(numberField) - percentile(numberField, 50) BY ipField", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = asin(*)", - "error": [ - "Using wildcards (*) in asin is not allowed" - ], + "query": "from a_index | stats avg(numberField) * percentile(numberField, 50) BY ipField", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = atan(numberField)", + "query": "from a_index | stats avg(numberField) / percentile(numberField, 50) BY ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval atan(numberField)", + "query": "from a_index | stats avg(numberField) % percentile(numberField, 50) BY ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = atan(to_integer(stringField))", - "error": [], + "query": "from a_index | stats count(* + 1) BY ipField", + "error": [ + "SyntaxError: no viable alternative at input 'count(* +'" + ], "warning": [] }, { - "query": "from a_index | eval atan(stringField)", + "query": "from a_index | stats count(* + round(numberField)) BY ipField", "error": [ - "Argument of [atan] must be [number], found value [stringField] type [string]" + "SyntaxError: no viable alternative at input 'count(* +'" ], "warning": [] }, { - "query": "from a_index | eval atan(numberField, extraArg)", + "query": "from a_index | stats count(round(*)) BY ipField", "error": [ - "Error: [atan] function expects exactly one argument, got 2." + "Using wildcards (*) in round is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = atan(*)", + "query": "from a_index | stats count(count(*)) BY ipField", "error": [ - "Using wildcards (*) in atan is not allowed" + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [number]" ], "warning": [] }, { - "query": "from a_index | eval var = atan2(numberField, numberField)", - "error": [], + "query": "from a_index | stats numberField + 1", + "error": [ + "At least one aggregation function required in [STATS], found [numberField+1]" + ], "warning": [] }, { - "query": "from a_index | eval atan2(numberField, numberField)", + "query": "from a_index | stats 5 + avg(numberField) +1", "error": [], "warning": [] }, { - "query": "from a_index | eval var = atan2(to_integer(stringField), to_integer(stringField))", + "query": "from a_index | stats 5 +1 + avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval atan2(stringField, stringField)", + "query": "from a_index | stats 5 +1 + numberField", "error": [ - "Argument of [atan2] must be [number], found value [stringField] type [string]", - "Argument of [atan2] must be [number], found value [stringField] type [string]" + "At least one aggregation function required in [STATS], found [5+1+numberField]" ], "warning": [] }, { - "query": "from a_index | eval atan2(numberField, numberField, extraArg)", + "query": "from a_index | stats 5 + numberField +1", "error": [ - "Error: [atan2] function expects exactly 2 arguments, got 3." + "At least one aggregation function required in [STATS], found [5+numberField+1]" ], "warning": [] }, { - "query": "from a_index | eval var = case(booleanField, stringField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval case(booleanField, stringField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = ceil(numberField)", - "error": [], + "query": "from a_index | stats 5 + numberField +1, var0 = sum(numberField)", + "error": [ + "At least one aggregation function required in [STATS], found [5+numberField+1]" + ], "warning": [] }, { - "query": "from a_index | eval ceil(numberField)", + "query": "from a_index | stats round( sum(numberField) )", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ceil(to_integer(stringField))", + "query": "from a_index | stats round( sum(numberField) ) + round( sum(numberField) )", "error": [], "warning": [] }, { - "query": "from a_index | eval ceil(stringField)", + "query": "from a_index | stats round( numberField + sum(numberField) )", "error": [ - "Argument of [ceil] must be [number], found value [stringField] type [string]" + "Cannot combine aggregation and non-aggregation values in [STATS], found [round(numberField+sum(numberField))]" ], "warning": [] }, { - "query": "from a_index | eval ceil(numberField, extraArg)", + "query": "from a_index | stats round( numberField + sum(numberField) ), var0 = sum(numberField)", "error": [ - "Error: [ceil] function expects exactly one argument, got 2." + "Cannot combine aggregation and non-aggregation values in [STATS], found [round(numberField+sum(numberField))]" ], "warning": [] }, { - "query": "from a_index | eval var = ceil(*)", + "query": "from a_index | stats var0 = round( numberField + sum(numberField) ), var1 = sum(numberField)", "error": [ - "Using wildcards (*) in ceil is not allowed" + "Cannot combine aggregation and non-aggregation values in [STATS], found [round(numberField+sum(numberField))]" ], "warning": [] }, { - "query": "from a_index | eval var = cidr_match(ipField, stringField)", + "query": "from a_index | stats round( sum(numberField + numberField) )", "error": [], "warning": [] }, { - "query": "from a_index | eval cidr_match(ipField, stringField)", + "query": "from a_index | stats round( sum(numberField + round(numberField)) )", "error": [], "warning": [] }, { - "query": "from a_index | eval var = cidr_match(to_ip(stringField), to_string(stringField))", + "query": "from a_index | stats round( sum(numberField + round(numberField)) ) + round( sum(numberField + round(numberField)) )", "error": [], "warning": [] }, { - "query": "from a_index | eval cidr_match(stringField, numberField)", - "error": [ - "Argument of [cidr_match] must be [ip], found value [stringField] type [string]", - "Argument of [cidr_match] must be [string], found value [numberField] type [number]" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = coalesce(stringField)", + "query": "from a_index | stats sum(round( numberField ) )", "error": [], "warning": [] }, { - "query": "from a_index | eval coalesce(stringField)", + "query": "from a_index | stats sum(round( numberField ) ) + sum(round( numberField ) )", "error": [], "warning": [] }, { - "query": "from a_index | eval var = concat(stringField, stringField)", + "query": "from a_index | stats 5 + avg(numberField) +1+1", "error": [], "warning": [] }, { - "query": "from a_index | eval concat(stringField, stringField)", + "query": "from a_index | stats 5 +1+1 + avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = concat(to_string(stringField), to_string(stringField))", - "error": [], + "query": "from a_index | stats 5 +1+1 + numberField", + "error": [ + "At least one aggregation function required in [STATS], found [5+1+1+numberField]" + ], "warning": [] }, { - "query": "from a_index | eval concat(numberField, numberField)", + "query": "from a_index | stats 5 + numberField +1+1", "error": [ - "Argument of [concat] must be [string], found value [numberField] type [number]" + "At least one aggregation function required in [STATS], found [5+numberField+1+1]" ], "warning": [] }, { - "query": "from a_index | eval var = cos(numberField)", - "error": [], + "query": "from a_index | stats 5 + numberField +1+1, var0 = sum(numberField)", + "error": [ + "At least one aggregation function required in [STATS], found [5+numberField+1+1]" + ], "warning": [] }, { - "query": "from a_index | eval cos(numberField)", + "query": "from a_index | stats round(round( sum(numberField) ))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = cos(to_integer(stringField))", + "query": "from a_index | stats round(round( sum(numberField) )) + round(round( sum(numberField) ))", "error": [], "warning": [] }, { - "query": "from a_index | eval cos(stringField)", + "query": "from a_index | stats round(round( numberField + sum(numberField) ))", "error": [ - "Argument of [cos] must be [number], found value [stringField] type [string]" + "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(numberField+sum(numberField)))]" ], "warning": [] }, { - "query": "from a_index | eval cos(numberField, extraArg)", + "query": "from a_index | stats round(round( numberField + sum(numberField) )), var0 = sum(numberField)", "error": [ - "Error: [cos] function expects exactly one argument, got 2." + "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(numberField+sum(numberField)))]" ], "warning": [] }, { - "query": "from a_index | eval var = cos(*)", + "query": "from a_index | stats var0 = round(round( numberField + sum(numberField) )), var1 = sum(numberField)", "error": [ - "Using wildcards (*) in cos is not allowed" + "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(numberField+sum(numberField)))]" ], "warning": [] }, { - "query": "from a_index | eval var = cosh(numberField)", + "query": "from a_index | stats round(round( sum(numberField + numberField) ))", "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(numberField)", + "query": "from a_index | stats round(round( sum(numberField + round(numberField)) ))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = cosh(to_integer(stringField))", + "query": "from a_index | stats round(round( sum(numberField + round(numberField)) )) + round(round( sum(numberField + round(numberField)) ))", "error": [], "warning": [] }, { - "query": "from a_index | eval cosh(stringField)", + "query": "from a_index | stats sum(round(round( numberField )) )", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats sum(round(round( numberField )) ) + sum(round(round( numberField )) )", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats 5 + avg(numberField) +1+1+1", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats 5 +1+1+1 + avg(numberField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats 5 +1+1+1 + numberField", "error": [ - "Argument of [cosh] must be [number], found value [stringField] type [string]" + "At least one aggregation function required in [STATS], found [5+1+1+1+numberField]" ], "warning": [] }, { - "query": "from a_index | eval cosh(numberField, extraArg)", + "query": "from a_index | stats 5 + numberField +1+1+1", "error": [ - "Error: [cosh] function expects exactly one argument, got 2." + "At least one aggregation function required in [STATS], found [5+numberField+1+1+1]" ], "warning": [] }, { - "query": "from a_index | eval var = cosh(*)", + "query": "from a_index | stats 5 + numberField +1+1+1, var0 = sum(numberField)", "error": [ - "Using wildcards (*) in cosh is not allowed" + "At least one aggregation function required in [STATS], found [5+numberField+1+1+1]" ], "warning": [] }, { - "query": "from a_index | eval var = date_diff(\"year\", dateField, dateField)", + "query": "from a_index | stats round(round(round( sum(numberField) )))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(\"year\", dateField, dateField)", + "query": "from a_index | stats round(round(round( sum(numberField) ))) + round(round(round( sum(numberField) )))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_diff(\"year\", to_datetime(stringField), to_datetime(stringField))", - "error": [], + "query": "from a_index | stats round(round(round( numberField + sum(numberField) )))", + "error": [ + "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(round(numberField+sum(numberField))))]" + ], "warning": [] }, { - "query": "from a_index | eval date_diff(numberField, stringField, stringField)", + "query": "from a_index | stats round(round(round( numberField + sum(numberField) ))), var0 = sum(numberField)", "error": [ - "Argument of [date_diff] must be [string], found value [numberField] type [number]", - "Argument of [date_diff] must be [date], found value [stringField] type [string]", - "Argument of [date_diff] must be [date], found value [stringField] type [string]" + "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(round(numberField+sum(numberField))))]" ], "warning": [] }, { - "query": "from a_index | eval date_diff(\"year\", dateField, dateField, extraArg)", + "query": "from a_index | stats var0 = round(round(round( numberField + sum(numberField) ))), var1 = sum(numberField)", "error": [ - "Error: [date_diff] function expects exactly 3 arguments, got 4." + "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(round(numberField+sum(numberField))))]" ], "warning": [] }, { - "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "query": "from a_index | stats round(round(round( sum(numberField + numberField) )))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "query": "from a_index | stats round(round(round( sum(numberField + round(numberField)) )))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(stringField))", + "query": "from a_index | stats round(round(round( sum(numberField + round(numberField)) ))) + round(round(round( sum(numberField + round(numberField)) )))", "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": "from a_index | stats sum(round(round(round( numberField ))) )", + "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": "from a_index | stats sum(round(round(round( numberField ))) ) + sum(round(round(round( numberField ))) )", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_format(dateField, stringField)", + "query": "from a_index | stats 5 + avg(numberField) +1+1+1+1", "error": [], "warning": [] }, { - "query": "from a_index | eval date_format(dateField, stringField)", + "query": "from a_index | stats 5 +1+1+1+1 + avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_format(to_datetime(stringField), to_string(stringField))", - "error": [], + "query": "from a_index | stats 5 +1+1+1+1 + numberField", + "error": [ + "At least one aggregation function required in [STATS], found [5+1+1+1+1+numberField]" + ], "warning": [] }, { - "query": "from a_index | eval date_format(stringField, numberField)", + "query": "from a_index | stats 5 + numberField +1+1+1+1", "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]" + "At least one aggregation function required in [STATS], found [5+numberField+1+1+1+1]" ], "warning": [] }, { - "query": "from a_index | eval date_format(dateField, stringField, extraArg)", + "query": "from a_index | stats 5 + numberField +1+1+1+1, var0 = sum(numberField)", "error": [ - "Error: [date_format] function expects no more than 2 arguments, got 3." + "At least one aggregation function required in [STATS], found [5+numberField+1+1+1+1]" ], "warning": [] }, { - "query": "from a_index | eval var = date_parse(stringField, stringField)", + "query": "from a_index | stats round(round(round(round( sum(numberField) ))))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_parse(stringField, stringField)", + "query": "from a_index | stats round(round(round(round( sum(numberField) )))) + round(round(round(round( sum(numberField) ))))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_parse(to_string(stringField), to_string(stringField))", - "error": [], + "query": "from a_index | stats round(round(round(round( numberField + sum(numberField) ))))", + "error": [ + "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(round(round(numberField+sum(numberField)))))]" + ], "warning": [] }, { - "query": "from a_index | eval date_parse(numberField, numberField)", + "query": "from a_index | stats round(round(round(round( numberField + sum(numberField) )))), var0 = sum(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]" + "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(round(round(numberField+sum(numberField)))))]" ], "warning": [] }, { - "query": "from a_index | eval date_parse(stringField, stringField, extraArg)", + "query": "from a_index | stats var0 = round(round(round(round( numberField + sum(numberField) )))), var1 = sum(numberField)", "error": [ - "Error: [date_parse] function expects exactly 2 arguments, got 3." + "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(round(round(numberField+sum(numberField)))))]" ], "warning": [] }, { - "query": "from a_index | eval var = date_trunc(1 year, dateField)", + "query": "from a_index | stats round(round(round(round( sum(numberField + numberField) ))))", "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(1 year, dateField)", + "query": "from a_index | stats round(round(round(round( sum(numberField + round(numberField)) ))))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = date_trunc(1 year, to_datetime(stringField))", + "query": "from a_index | stats round(round(round(round( sum(numberField + round(numberField)) )))) + round(round(round(round( sum(numberField + round(numberField)) ))))", "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": "from a_index | stats sum(round(round(round(round( numberField )))) )", + "error": [], "warning": [] }, { - "query": "from a_index | eval date_trunc(1 year, dateField, extraArg)", + "query": "from a_index | stats sum(round(round(round(round( numberField )))) ) + sum(round(round(round(round( numberField )))) )", + "error": [], + "warning": [] + }, + { + "query": "from a_index | stats 5 + numberField + 1", "error": [ - "Error: [date_trunc] function expects exactly 2 arguments, got 3." + "At least one aggregation function required in [STATS], found [5+numberField+1]" ], "warning": [] }, { - "query": "from a_index | eval var = e()", - "error": [], + "query": "from a_index | stats numberField + 1 by ipField", + "error": [ + "At least one aggregation function required in [STATS], found [numberField+1]" + ], "warning": [] }, { - "query": "from a_index | eval e()", + "query": "from a_index | stats avg(numberField), percentile(numberField, 50) + 1 by ipField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = e()", + "query": "from a_index | stats count(*)", "error": [], "warning": [] }, { - "query": "from a_index | eval e()", + "query": "from a_index | stats count()", "error": [], "warning": [] }, { - "query": "from a_index | eval e(extraArg)", - "error": [ - "Error: [e] function expects exactly 0 arguments, got 1." - ], + "query": "from a_index | stats var0 = count(*)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = ends_with(stringField, stringField)", + "query": "from a_index | stats var0 = count()", "error": [], "warning": [] }, { - "query": "from a_index | eval ends_with(stringField, stringField)", + "query": "from a_index | stats var0 = avg(numberField), count(*)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = ends_with(to_string(stringField), to_string(stringField))", - "error": [], + "query": "from a_index | stats var0 = avg(fn(number)), count(*)", + "error": [ + "Unknown function [fn]" + ], "warning": [] }, { - "query": "from a_index | eval ends_with(numberField, numberField)", + "query": "from a_index | STATS sum( numberField ) + abs( 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]" + "Cannot combine aggregation and non-aggregation values in [STATS], found [sum(numberField)+abs(numberField)]" ], "warning": [] }, { - "query": "from a_index | eval ends_with(stringField, stringField, extraArg)", + "query": "from a_index | STATS abs( numberField + sum( numberField )) ", "error": [ - "Error: [ends_with] function expects exactly 2 arguments, got 3." + "Cannot combine aggregation and non-aggregation values in [STATS], found [abs(numberField+sum(numberField))]" ], "warning": [] }, { - "query": "from a_index | eval var = floor(numberField)", + "query": "FROM index\n | EVAL numberField * 3.281\n | STATS avg_numberField = AVG(`numberField * 3.281`)", "error": [], "warning": [] }, { - "query": "from a_index | eval floor(numberField)", + "query": "FROM index | STATS AVG(numberField) by round(numberField) + 1 | EVAL `round(numberField) + 1` / 2", "error": [], "warning": [] }, { - "query": "from a_index | eval var = floor(to_integer(stringField))", + "query": "from a_index | stats sum(case(false, 0, 1))", "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 | stats var0 = sum( case(false, 0, 1))", + "error": [], "warning": [] }, { - "query": "from a_index | eval floor(numberField, extraArg)", + "query": "from index | stats by bucket(dateField, abs(numberField), \"\", \"\")", "error": [ - "Error: [floor] function expects exactly one argument, got 2." + "Argument of [bucket] must be a constant, received [abs(numberField)]" ], "warning": [] }, { - "query": "from a_index | eval var = floor(*)", + "query": "from index | stats by bucket(dateField, abs(length(numberField)), \"\", \"\")", "error": [ - "Using wildcards (*) in floor is not allowed" + "Argument of [bucket] must be a constant, received [abs(length(numberField))]" ], "warning": [] }, { - "query": "from a_index | eval var = greatest(stringField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval greatest(stringField)", + "query": "from index | stats by bucket(dateField, pi(), \"\", \"\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = least(stringField)", + "query": "from index | stats by bucket(dateField, 1 + 30 / 10, \"\", \"\")", "error": [], "warning": [] }, { - "query": "from a_index | eval least(stringField)", + "query": "from index | stats by bucket(dateField, 1 + 30 / 10, concat(\"\", \"\"), \"\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = left(stringField, numberField)", - "error": [], + "query": "from 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 | eval left(stringField, numberField)", - "error": [], + "query": "from a_index | sort ", + "error": [ + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + ], "warning": [] }, { - "query": "from a_index | eval var = left(to_string(stringField), to_integer(stringField))", + "query": "from a_index | sort \"field\" ", "error": [], "warning": [] }, { - "query": "from a_index | eval left(numberField, stringField)", + "query": "from a_index | sort wrongField ", "error": [ - "Argument of [left] must be [string], found value [numberField] type [number]", - "Argument of [left] must be [number], found value [stringField] type [string]" + "Unknown column [wrongField]" ], "warning": [] }, { - "query": "from a_index | eval left(stringField, numberField, extraArg)", + "query": "from a_index | sort numberField, ", "error": [ - "Error: [left] function expects exactly 2 arguments, got 3." + "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" ], "warning": [] }, { - "query": "from a_index | eval var = length(stringField)", + "query": "from a_index | sort numberField, stringField", "error": [], "warning": [] }, { - "query": "from a_index | eval length(stringField)", + "query": "from a_index | sort \"field\" desc ", "error": [], "warning": [] }, { - "query": "from a_index | eval var = length(to_string(stringField))", + "query": "from a_index | sort numberField desc ", "error": [], "warning": [] }, { - "query": "from a_index | eval length(numberField)", + "query": "from a_index | sort numberField desc nulls ", "error": [ - "Argument of [length] must be [string], found value [numberField] type [number]" + "SyntaxError: missing {'first', 'last'} at ''" ], "warning": [] }, { - "query": "from a_index | eval length(stringField, extraArg)", - "error": [ - "Error: [length] function expects exactly one argument, got 2." - ], + "query": "from a_index | sort numberField desc nulls first", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = length(*)", + "query": "from a_index | sort numberField desc first", "error": [ - "Using wildcards (*) in length is not allowed" + "SyntaxError: extraneous input 'first' expecting " ], "warning": [] }, { - "query": "from a_index | eval var = log(numberField, numberField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval log(numberField, numberField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval var = log(to_integer(stringField), to_integer(stringField))", + "query": "from a_index | sort numberField desc nulls last", "error": [], "warning": [] }, { - "query": "from a_index | eval log(stringField, stringField)", + "query": "from a_index | sort numberField desc last", "error": [ - "Argument of [log] must be [number], found value [stringField] type [string]", - "Argument of [log] must be [number], found value [stringField] type [string]" + "SyntaxError: extraneous input 'last' expecting " ], "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 \"field\" asc ", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = log10(numberField)", + "query": "from a_index | sort numberField asc ", "error": [], "warning": [] }, { - "query": "from a_index | eval log10(numberField)", - "error": [], + "query": "from a_index | sort numberField asc nulls ", + "error": [ + "SyntaxError: missing {'first', 'last'} at ''" + ], "warning": [] }, { - "query": "from a_index | eval var = log10(to_integer(stringField))", + "query": "from a_index | sort numberField asc nulls first", "error": [], "warning": [] }, { - "query": "from a_index | eval log10(stringField)", + "query": "from a_index | sort numberField asc first", "error": [ - "Argument of [log10] must be [number], found value [stringField] type [string]" + "SyntaxError: extraneous input 'first' expecting " ], "warning": [] }, { - "query": "from a_index | eval log10(numberField, extraArg)", - "error": [ - "Error: [log10] function expects exactly one argument, got 2." - ], + "query": "from a_index | sort numberField asc nulls last", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = log10(*)", + "query": "from a_index | sort numberField asc last", "error": [ - "Using wildcards (*) in log10 is not allowed" + "SyntaxError: extraneous input 'last' expecting " ], "warning": [] }, { - "query": "from a_index | eval var = ltrim(stringField)", + "query": "from a_index | sort numberField nulls first", "error": [], "warning": [] }, { - "query": "from a_index | eval ltrim(stringField)", - "error": [], + "query": "from a_index | sort numberField first", + "error": [ + "SyntaxError: extraneous input 'first' expecting " + ], "warning": [] }, { - "query": "from a_index | eval var = ltrim(to_string(stringField))", + "query": "from a_index | sort numberField nulls last", "error": [], "warning": [] }, { - "query": "from a_index | eval ltrim(numberField)", + "query": "from a_index | sort numberField last", "error": [ - "Argument of [ltrim] must be [string], found value [numberField] type [number]" + "SyntaxError: extraneous input 'last' expecting " ], "warning": [] }, { - "query": "from a_index | eval ltrim(stringField, extraArg)", - "error": [ - "Error: [ltrim] function expects exactly one argument, got 2." - ], + "query": "row a = 1 | stats COUNT(*) | sort `COUNT(*)`", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = ltrim(*)", - "error": [ - "Using wildcards (*) in ltrim is not allowed" - ], + "query": "ROW a = 1 | STATS couNt(*) | SORT `couNt(*)`", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_avg(numberField)", + "query": "from a_index | sort abs(numberField) - to_long(stringField) desc nulls first", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_avg(numberField)", - "error": [], + "query": "from a_index | sort sin(stringField)", + "error": [ + "Argument of [sin] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_avg(to_integer(stringField))", - "error": [], + "query": "from a_index | sort numberField + stringField", + "error": [ + "Argument of [+] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | eval mv_avg(stringField)", + "query": "from a_index | enrich", "error": [ - "Argument of [mv_avg] must be [number], found value [stringField] type [string]" + "SyntaxError: missing ENRICH_POLICY_NAME at ''" ], "warning": [] }, { - "query": "from a_index | eval mv_avg(numberField, extraArg)", + "query": "from a_index | enrich _", "error": [ - "Error: [mv_avg] function expects exactly one argument, got 2." + "Unknown policy [_]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_avg(*)", + "query": "from a_index | enrich _:", "error": [ - "Using wildcards (*) in mv_avg is not allowed" + "SyntaxError: token recognition error at: ':'", + "Unknown policy [_]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_concat(stringField, stringField)", - "error": [], + "query": "from a_index | enrich _:policy", + "error": [ + "Unrecognized value [_] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" + ], "warning": [] }, { - "query": "from a_index | eval mv_concat(stringField, stringField)", - "error": [], + "query": "from a_index | enrich :policy", + "error": [ + "SyntaxError: token recognition error at: ':'" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_concat(to_string(stringField), to_string(stringField))", - "error": [], + "query": "from a_index | enrich any:", + "error": [ + "SyntaxError: token recognition error at: ':'", + "Unknown policy [any]" + ], "warning": [] }, { - "query": "from a_index | eval mv_concat(numberField, numberField)", + "query": "from a_index | enrich _any:", "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]" + "SyntaxError: token recognition error at: ':'", + "Unknown policy [_any]" ], "warning": [] }, { - "query": "from a_index | eval mv_concat(stringField, stringField, extraArg)", + "query": "from a_index | enrich any:policy", "error": [ - "Error: [mv_concat] function expects exactly 2 arguments, got 3." + "Unrecognized value [any] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_count(stringField)", + "query": "from a_index | enrich policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_count(stringField)", - "error": [], + "query": "from a_index | enrich `this``is fine`", + "error": [ + "SyntaxError: mismatched input '`this``is fine`' expecting ENRICH_POLICY_NAME" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_count(*)", + "query": "from a_index | enrich this is fine", "error": [ - "Using wildcards (*) in mv_count is not allowed" + "SyntaxError: mismatched input 'is' expecting ", + "Unknown policy [this]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(stringField)", + "query": "from a_index | enrich _any:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_dedupe(stringField)", - "error": [], + "query": "from a_index | enrich _any : policy ", + "error": [ + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_any]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_dedupe(*)", + "query": "from a_index | enrich _any: policy ", "error": [ - "Using wildcards (*) in mv_dedupe is not allowed" + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_any]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_first(stringField)", + "query": "from a_index | enrich _any:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_first(stringField)", + "query": "from a_index | enrich _ANY:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_first(*)", + "query": "from a_index | enrich _coordinator:policy ", + "error": [], + "warning": [] + }, + { + "query": "from a_index | enrich _coordinator : policy ", "error": [ - "Using wildcards (*) in mv_first is not allowed" + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_coordinator]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_last(stringField)", - "error": [], + "query": "from a_index | enrich _coordinator: policy ", + "error": [ + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_coordinator]" + ], "warning": [] }, { - "query": "from a_index | eval mv_last(stringField)", + "query": "from a_index | enrich _coordinator:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_last(*)", - "error": [ - "Using wildcards (*) in mv_last is not allowed" - ], + "query": "from a_index | enrich _COORDINATOR:policy ", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_max(stringField)", + "query": "from a_index | enrich _remote:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_max(stringField)", - "error": [], + "query": "from a_index | enrich _remote : policy ", + "error": [ + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_remote]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_max(*)", + "query": "from a_index | enrich _remote: policy ", "error": [ - "Using wildcards (*) in mv_max is not allowed" + "SyntaxError: token recognition error at: ':'", + "SyntaxError: extraneous input 'policy' expecting ", + "Unknown policy [_remote]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_median(numberField)", + "query": "from a_index | enrich _remote:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_median(numberField)", + "query": "from a_index | enrich _REMOTE:policy ", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_median(to_integer(stringField))", - "error": [], + "query": "from a_index | enrich _unknown:policy", + "error": [ + "Unrecognized value [_unknown] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" + ], "warning": [] }, { - "query": "from a_index | eval mv_median(stringField)", + "query": "from a_index |enrich missing-policy ", "error": [ - "Argument of [mv_median] must be [number], found value [stringField] type [string]" + "Unknown policy [missing-policy]" ], "warning": [] }, { - "query": "from a_index | eval mv_median(numberField, extraArg)", + "query": "from a_index |enrich policy on ", "error": [ - "Error: [mv_median] function expects exactly one argument, got 2." + "SyntaxError: missing ID_PATTERN at ''" ], "warning": [] }, { - "query": "from a_index | eval var = mv_median(*)", + "query": "from a_index | enrich policy on b ", "error": [ - "Using wildcards (*) in mv_median is not allowed" + "Unknown column [b]" ], "warning": [] }, { - "query": "from a_index | eval var = mv_min(stringField)", - "error": [], + "query": "from a_index | enrich policy on `this``is fine`", + "error": [ + "Unknown column [this`is fine]" + ], "warning": [] }, { - "query": "from a_index | eval mv_min(stringField)", - "error": [], + "query": "from a_index | enrich policy on this is fine", + "error": [ + "SyntaxError: mismatched input 'is' expecting ", + "Unknown column [this]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_min(*)", + "query": "from a_index | enrich policy on stringField with ", "error": [ - "Using wildcards (*) in mv_min is not allowed" + "SyntaxError: mismatched input '' expecting ID_PATTERN" ], "warning": [] }, { - "query": "from a_index | eval var = mv_slice(stringField, numberField, numberField)", - "error": [], + "query": "from a_index | enrich policy on stringField with var0 ", + "error": [ + "Unknown column [var0]" + ], "warning": [] }, { - "query": "from a_index | eval mv_slice(stringField, numberField, numberField)", - "error": [], + "query": "from a_index |enrich policy on numberField with var0 = ", + "error": [ + "SyntaxError: missing ID_PATTERN at ''", + "Unknown column [var0]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_sort(stringField, \"asc\")", - "error": [], + "query": "from a_index | enrich policy on stringField with var0 = c ", + "error": [ + "Unknown column [var0]", + "Unknown column [c]" + ], "warning": [] }, { - "query": "from a_index | eval mv_sort(stringField, \"asc\")", - "error": [], + "query": "from a_index |enrich policy on numberField with var0 = , ", + "error": [ + "SyntaxError: missing ID_PATTERN at ','", + "SyntaxError: mismatched input '' expecting ID_PATTERN", + "Unknown column [var0]" + ], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(numberField)", - "error": [], + "query": "from a_index | enrich policy on stringField with var0 = otherField, var1 ", + "error": [ + "Unknown column [var1]" + ], "warning": [] }, { - "query": "from a_index | eval mv_sum(numberField)", + "query": "from a_index | enrich policy on stringField with var0 = otherField ", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(to_integer(stringField))", + "query": "from a_index | enrich policy on stringField with var0 = otherField, yetAnotherField ", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sum(stringField)", + "query": "from a_index |enrich policy on numberField with var0 = otherField, var1 = ", "error": [ - "Argument of [mv_sum] must be [number], found value [stringField] type [string]" + "SyntaxError: missing ID_PATTERN at ''", + "Unknown column [var1]" ], "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 | enrich policy on stringField with var0 = otherField, var1 = yetAnotherField", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_sum(*)", - "error": [ - "Using wildcards (*) in mv_sum is not allowed" - ], + "query": "from a_index | enrich policy on stringField with var0 = otherField, `this``is fine` = yetAnotherField", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(stringField, stringField, stringField)", - "error": [], + "query": "from a_index | enrich policy with ", + "error": [ + "SyntaxError: mismatched input '' expecting ID_PATTERN" + ], "warning": [] }, { - "query": "from a_index | eval mv_zip(stringField, stringField, stringField)", + "query": "from a_index | enrich policy with otherField", "error": [], "warning": [] }, { - "query": "from a_index | eval var = mv_zip(to_string(stringField), to_string(stringField), to_string(stringField))", + "query": "from a_index | enrich policy | eval otherField", "error": [], "warning": [] }, { - "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]" - ], + "query": "from a_index | enrich policy with var0 = otherField | eval var0", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_zip(stringField, stringField, stringField, extraArg)", + "query": "from a_index | enrich my-pol*", "error": [ - "Error: [mv_zip] function expects exactly 3 arguments, got 4." + "Using wildcards (*) in ENRICH is not allowed [my-pol*]" ], "warning": [] }, { - "query": "from a_index | eval var = now()", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval now()", + "query": "from a_index | eval stringField = 5", "error": [], - "warning": [] + "warning": [ + "Column [stringField] of type string has been overwritten as new type: number" + ] }, { - "query": "from a_index | eval var = now()", + "query": "from a_index | eval numberField = \"5\"", "error": [], - "warning": [] + "warning": [ + "Column [numberField] of type number has been overwritten as new type: string" + ] }, { - "query": "from a_index | eval now()", + "query": "from a_index | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | keep ```round(numberField) + 1`` + 1`", "error": [], "warning": [] }, { - "query": "from a_index | eval now(extraArg)", - "error": [ - "Error: [now] function expects exactly 0 arguments, got 1." - ], + "query": "from a_index | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | eval ```round(numberField) + 1`` + 1` + 1 | keep ```````round(numberField) + 1```` + 1`` + 1`", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = pi()", + "query": "from a_index | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | eval ```round(numberField) + 1`` + 1` + 1 | eval ```````round(numberField) + 1```` + 1`` + 1` + 1 | keep ```````````````round(numberField) + 1```````` + 1```` + 1`` + 1`", "error": [], "warning": [] }, { - "query": "from a_index | eval pi()", + "query": "from a_index | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | eval ```round(numberField) + 1`` + 1` + 1 | eval ```````round(numberField) + 1```` + 1`` + 1` + 1 | eval ```````````````round(numberField) + 1```````` + 1```` + 1`` + 1` + 1 | keep ```````````````````````````````round(numberField) + 1```````````````` + 1```````` + 1```` + 1`` + 1`", "error": [], "warning": [] }, { - "query": "from a_index | eval var = pi()", + "query": "row var = date_diff(\"month\", \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", "error": [], "warning": [] }, { - "query": "from a_index | eval pi()", + "query": "row var = date_diff(\"mm\", \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", "error": [], "warning": [] }, { - "query": "from a_index | eval pi(extraArg)", - "error": [ - "Error: [pi] function expects exactly 0 arguments, got 1." - ], - "warning": [] + "query": "row var = date_diff(\"bogus\", \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", + "error": [], + "warning": [ + "Invalid option [\"bogus\"] for date_diff. Supported options: [\"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\"]." + ] }, { - "query": "from a_index | eval var = pow(numberField, numberField)", + "query": "from a_index | eval date_diff(stringField, \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", "error": [], "warning": [] }, { - "query": "from a_index | eval pow(numberField, numberField)", + "query": "from a_index | eval date_diff(\"month\", dateField, \"2023-12-02T11:00:00.000Z\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = pow(to_integer(stringField), to_integer(stringField))", + "query": "from a_index | eval date_diff(\"month\", \"2023-12-02T11:00:00.000Z\", dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval pow(stringField, stringField)", + "query": "from a_index | eval date_diff(\"month\", stringField, dateField)", "error": [ - "Argument of [pow] must be [number], found value [stringField] type [string]", - "Argument of [pow] must be [number], found value [stringField] type [string]" + "Argument of [date_diff] must be [date], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval pow(numberField, numberField, extraArg)", + "query": "from a_index | eval date_diff(\"month\", dateField, stringField)", "error": [ - "Error: [pow] function expects exactly 2 arguments, got 3." + "Argument of [date_diff] must be [date], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = replace(stringField, stringField, stringField)", + "query": "row var = abs(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval replace(stringField, stringField, stringField)", + "query": "row abs(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = replace(to_string(stringField), to_string(stringField), to_string(stringField))", + "query": "row var = abs(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval replace(numberField, numberField, numberField)", + "query": "row var = abs(\"a\")", "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 [abs] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval replace(stringField, stringField, stringField, extraArg)", + "query": "from a_index | where abs(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where abs(stringField) > 0", "error": [ - "Error: [replace] function expects exactly 3 arguments, got 4." + "Argument of [abs] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = right(stringField, numberField)", + "query": "from a_index | eval var = abs(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval right(stringField, numberField)", + "query": "from a_index | eval abs(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = right(to_string(stringField), to_integer(stringField))", + "query": "from a_index | eval var = abs(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval right(numberField, stringField)", + "query": "from a_index | eval abs(stringField)", "error": [ - "Argument of [right] must be [string], found value [numberField] type [number]", - "Argument of [right] must be [number], found value [stringField] type [string]" + "Argument of [abs] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval right(stringField, numberField, extraArg)", + "query": "from a_index | eval abs(numberField, extraArg)", "error": [ - "Error: [right] function expects exactly 2 arguments, got 3." + "Error: [abs] function expects exactly one argument, got 2." ], "warning": [] }, { - "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)", + "query": "from a_index | eval var = abs(*)", "error": [ - "Argument of [round] must be [number], found value [stringField] type [string]", - "Argument of [round] must be [number], found value [stringField] type [string]" + "Using wildcards (*) in abs is not allowed" ], "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 | sort abs(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = rtrim(stringField)", + "query": "row var = acos(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(stringField)", + "query": "row acos(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = rtrim(to_string(stringField))", + "query": "row var = acos(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval rtrim(numberField)", + "query": "row var = acos(\"a\")", "error": [ - "Argument of [rtrim] must be [string], found value [numberField] type [number]" + "Argument of [acos] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval rtrim(stringField, extraArg)", - "error": [ - "Error: [rtrim] function expects exactly one argument, got 2." - ], + "query": "from a_index | where acos(numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = rtrim(*)", + "query": "from a_index | where acos(stringField) > 0", "error": [ - "Using wildcards (*) in rtrim is not allowed" + "Argument of [acos] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = signum(numberField)", + "query": "from a_index | eval var = acos(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval signum(numberField)", + "query": "from a_index | eval acos(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = signum(to_integer(stringField))", + "query": "from a_index | eval var = acos(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval signum(stringField)", + "query": "from a_index | eval acos(stringField)", "error": [ - "Argument of [signum] must be [number], found value [stringField] type [string]" + "Argument of [acos] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval signum(numberField, extraArg)", + "query": "from a_index | eval acos(numberField, extraArg)", "error": [ - "Error: [signum] function expects exactly one argument, got 2." + "Error: [acos] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = signum(*)", + "query": "from a_index | eval var = acos(*)", "error": [ - "Using wildcards (*) in signum is not allowed" + "Using wildcards (*) in acos is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = sin(numberField)", + "query": "from a_index | sort acos(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval sin(numberField)", + "query": "row var = asin(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = sin(to_integer(stringField))", + "query": "row asin(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval sin(stringField)", - "error": [ - "Argument of [sin] must be [number], found value [stringField] type [string]" - ], + "query": "row var = asin(to_integer(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval sin(numberField, extraArg)", + "query": "row var = asin(\"a\")", "error": [ - "Error: [sin] function expects exactly one argument, got 2." + "Argument of [asin] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = sin(*)", + "query": "from a_index | where asin(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where asin(stringField) > 0", "error": [ - "Using wildcards (*) in sin is not allowed" + "Argument of [asin] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = sinh(numberField)", + "query": "from a_index | eval var = asin(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval sinh(numberField)", + "query": "from a_index | eval asin(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = sinh(to_integer(stringField))", + "query": "from a_index | eval var = asin(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval sinh(stringField)", + "query": "from a_index | eval asin(stringField)", "error": [ - "Argument of [sinh] must be [number], found value [stringField] type [string]" + "Argument of [asin] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval sinh(numberField, extraArg)", + "query": "from a_index | eval asin(numberField, extraArg)", "error": [ - "Error: [sinh] function expects exactly one argument, got 2." + "Error: [asin] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = sinh(*)", + "query": "from a_index | eval var = asin(*)", "error": [ - "Using wildcards (*) in sinh is not allowed" + "Using wildcards (*) in asin is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = split(stringField, stringField)", + "query": "from a_index | sort asin(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval split(stringField, stringField)", + "query": "row var = atan(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = split(to_string(stringField), to_string(stringField))", + "query": "row atan(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval split(numberField, numberField)", + "query": "row var = atan(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = atan(\"a\")", "error": [ - "Argument of [split] must be [string], found value [numberField] type [number]", - "Argument of [split] must be [string], found value [numberField] type [number]" + "Argument of [atan] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval split(stringField, stringField, extraArg)", + "query": "from a_index | where atan(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where atan(stringField) > 0", "error": [ - "Error: [split] function expects exactly 2 arguments, got 3." + "Argument of [atan] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = sqrt(numberField)", + "query": "from a_index | eval var = atan(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(numberField)", + "query": "from a_index | eval atan(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = sqrt(to_integer(stringField))", + "query": "from a_index | eval var = atan(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval sqrt(stringField)", + "query": "from a_index | eval atan(stringField)", "error": [ - "Argument of [sqrt] must be [number], found value [stringField] type [string]" + "Argument of [atan] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval sqrt(numberField, extraArg)", + "query": "from a_index | eval atan(numberField, extraArg)", "error": [ - "Error: [sqrt] function expects exactly one argument, got 2." + "Error: [atan] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = sqrt(*)", + "query": "from a_index | eval var = atan(*)", "error": [ - "Using wildcards (*) in sqrt is not allowed" + "Using wildcards (*) in atan is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoPointField, geoPointField)", + "query": "from a_index | sort atan(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoPointField)", + "query": "row var = atan2(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geopoint(stringField), to_geopoint(stringField))", + "query": "row atan2(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(stringField, stringField)", + "query": "row var = atan2(to_integer(\"a\"), to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = atan2(\"a\", \"a\")", "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]" + "Argument of [atan2] must be [number], found value [\"a\"] type [string]", + "Argument of [atan2] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoPointField, extraArg)", + "query": "from a_index | where atan2(numberField, numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where atan2(stringField, stringField) > 0", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Argument of [atan2] must be [number], found value [stringField] type [string]", + "Argument of [atan2] 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 = atan2(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoShapeField)", + "query": "from a_index | eval atan2(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_geopoint(stringField), geoShapeField)", + "query": "from a_index | eval var = atan2(to_integer(stringField), to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(stringField, stringField)", + "query": "from a_index | eval atan2(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]" + "Argument of [atan2] must be [number], found value [stringField] type [string]", + "Argument of [atan2] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval st_contains(geoPointField, geoShapeField, extraArg)", + "query": "from a_index | eval atan2(numberField, numberField, extraArg)", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Error: [atan2] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, geoPointField)", + "query": "from a_index | sort atan2(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoPointField)", + "query": "row var = case(true, \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, to_geopoint(stringField))", + "query": "row case(true, \"a\")", "error": [], "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 | eval var = case(booleanField, stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoPointField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval case(booleanField, stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, geoShapeField)", + "query": "from a_index | sort case(booleanField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoShapeField)", + "query": "row var = ceil(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(geoShapeField, geoShapeField)", + "query": "row ceil(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(stringField, stringField)", + "query": "row var = ceil(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = ceil(\"a\")", "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]" + "Argument of [ceil] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval st_contains(geoShapeField, geoShapeField, extraArg)", + "query": "from a_index | where ceil(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where ceil(stringField) > 0", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Argument of [ceil] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = ceil(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval ceil(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "from a_index | eval var = ceil(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(stringField, stringField)", + "query": "from a_index | eval ceil(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]" + "Argument of [ceil] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField, extraArg)", + "query": "from a_index | eval ceil(numberField, extraArg)", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Error: [ceil] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)", + "query": "from a_index | eval var = ceil(*)", + "error": [ + "Using wildcards (*) in ceil is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort ceil(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField)", + "query": "row var = cidr_match(to_ip(\"127.0.0.1\"), \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "row cidr_match(to_ip(\"127.0.0.1\"), \"a\")", "error": [], "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": "row var = cidr_match(to_ip(\"a\"), to_string(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField, extraArg)", + "query": "row var = cidr_match(\"a\", 5)", "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." + "Argument of [cidr_match] must be [ip], found value [\"a\"] type [string]", + "Argument of [cidr_match] must be [string], found value [5] type [number]" ], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)", + "query": "from a_index | eval var = cidr_match(ipField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField)", + "query": "from a_index | eval cidr_match(ipField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "from a_index | eval var = cidr_match(to_ip(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(stringField, stringField)", + "query": "from a_index | eval cidr_match(stringField, numberField)", "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]" + "Argument of [cidr_match] must be [ip], found value [stringField] type [string]", + "Argument of [cidr_match] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | sort cidr_match(ipField, stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)", + "query": "row var = coalesce(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)", + "query": "row coalesce(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | eval var = coalesce(stringField)", "error": [], "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 | eval coalesce(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_contains] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | sort coalesce(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoPointField, geoPointField)", + "query": "row var = concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoPointField)", + "query": "row concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geopoint(stringField), to_geopoint(stringField))", + "query": "row var = concat(to_string(\"a\"), to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(stringField, stringField)", + "query": "row var = concat(5, 5)", "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]" + "Argument of [concat] must be [string], found value [5] type [number]" ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoPointField, extraArg)", + "query": "from a_index | where length(concat(stringField, stringField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(concat(numberField, numberField)) > 0", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Argument of [concat] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoPointField, geoShapeField)", + "query": "from a_index | eval var = concat(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField)", + "query": "from a_index | eval concat(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_geopoint(stringField), geoShapeField)", + "query": "from a_index | eval var = concat(to_string(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(stringField, stringField)", + "query": "from a_index | eval concat(numberField, numberField)", "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]" + "Argument of [concat] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | sort concat(stringField, stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, geoPointField)", + "query": "row var = cos(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField)", + "query": "row cos(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, to_geopoint(stringField))", + "query": "row var = cos(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(stringField, stringField)", + "query": "row var = cos(\"a\")", "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]" + "Argument of [cos] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField, extraArg)", + "query": "from a_index | where cos(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where cos(stringField) > 0", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Argument of [cos] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)", + "query": "from a_index | eval var = cos(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField)", + "query": "from a_index | eval cos(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)", + "query": "from a_index | eval var = cos(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(stringField, stringField)", + "query": "from a_index | eval cos(stringField)", "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]" + "Argument of [cos] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField, extraArg)", + "query": "from a_index | eval cos(numberField, extraArg)", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Error: [cos] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = cos(*)", + "error": [ + "Using wildcards (*) in cos is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort cos(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)", + "query": "row var = cosh(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "row cosh(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(stringField, stringField)", + "query": "row var = cosh(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = cosh(\"a\")", "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]" + "Argument of [cosh] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)", + "query": "from a_index | where cosh(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where cosh(stringField) > 0", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Argument of [cosh] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)", + "query": "from a_index | eval var = cosh(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)", + "query": "from a_index | eval cosh(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "from a_index | eval var = cosh(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(stringField, stringField)", + "query": "from a_index | eval cosh(stringField)", "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]" + "Argument of [cosh] must be [number], found value [stringField] type [string]" + ], + "warning": [] + }, + { + "query": "from a_index | eval cosh(numberField, extraArg)", + "error": [ + "Error: [cosh] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField, extraArg)", + "query": "from a_index | eval var = cosh(*)", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Using wildcards (*) in cosh is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianPointField)", + "query": "from a_index | sort cosh(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)", + "query": "from a_index | eval var = date_diff(\"year\", dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "from a_index | eval date_diff(\"year\", dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(stringField, stringField)", - "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]" - ], + "query": "from a_index | eval var = date_diff(\"year\", to_datetime(stringField), to_datetime(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField, extraArg)", + "query": "from a_index | eval date_diff(numberField, stringField, stringField)", "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." + "Argument of [date_diff] must be [string], found value [numberField] type [number]", + "Argument of [date_diff] must be [date], found value [stringField] type [string]", + "Argument of [date_diff] must be [date], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)", - "error": [], + "query": "from a_index | eval date_diff(\"year\", dateField, dateField, extraArg)", + "error": [ + "Error: [date_diff] function expects exactly 3 arguments, got 4." + ], "warning": [] }, { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | sort date_diff(\"year\", dateField, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)", + "query": "row var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", now())", "error": [], "warning": [] }, { - "query": "from a_index | eval st_disjoint(stringField, stringField)", - "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]" - ], - "warning": [] - }, - { - "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_disjoint] function expects exactly 2 arguments, got 3." - ], + "query": "row date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", now())", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoPointField, geoPointField)", + "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoPointField)", + "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geopoint(stringField), to_geopoint(stringField))", + "query": "from a_index | eval var = date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", to_datetime(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(stringField, stringField)", + "query": "from a_index | eval date_extract(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]" + "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": "from a_index | eval st_intersects(geoPointField, geoPointField, extraArg)", + "query": "from a_index | eval date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField, extraArg)", "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." + "Error: [date_extract] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoPointField, geoShapeField)", + "query": "from a_index | sort date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoPointField, geoShapeField)", + "query": "row var = date_format(now(), \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_geopoint(stringField), geoShapeField)", + "query": "row date_format(now(), \"a\")", "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]" - ], - "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)", + "query": "from a_index | eval var = date_format(dateField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoShapeField, geoPointField)", + "query": "from a_index | eval date_format(dateField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoShapeField, to_geopoint(stringField))", + "query": "from a_index | eval var = date_format(to_datetime(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(stringField, stringField)", + "query": "from a_index | eval date_format(stringField, numberField)", "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]" + "Argument of [date_format] must be [date], found value [stringField] type [string]", + "Argument of [date_format] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoShapeField, geoPointField, extraArg)", + "query": "from a_index | eval date_format(dateField, stringField, extraArg)", "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." + "Error: [date_format] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoShapeField, geoShapeField)", + "query": "from a_index | sort date_format(dateField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField)", + "query": "row var = date_parse(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(geoShapeField, geoShapeField)", + "query": "row date_parse(\"a\", \"a\")", "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 var = date_parse(to_string(\"a\"), to_string(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField, extraArg)", + "query": "row var = date_parse(5, 5)", "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." + "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 | eval var = st_intersects(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval var = date_parse(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField)", + "query": "from a_index | eval date_parse(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "from a_index | eval var = date_parse(to_string(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(stringField, stringField)", + "query": "from a_index | eval date_parse(numberField, numberField)", "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]" + "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 st_intersects(cartesianPointField, cartesianPointField, extraArg)", + "query": "from a_index | eval date_parse(stringField, stringField, extraArg)", "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." + "Error: [date_parse] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)", + "query": "from a_index | sort date_parse(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)", + "query": "row var = date_trunc(1 year, now())", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "row date_trunc(1 year, 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]" - ], - "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)", + "query": "from a_index | eval var = date_trunc(1 year, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)", + "query": "from a_index | eval date_trunc(1 year, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "from a_index | eval var = date_trunc(1 year, to_datetime(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(stringField, stringField)", + "query": "from a_index | eval date_trunc(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]" + "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 st_intersects(cartesianShapeField, cartesianPointField, extraArg)", + "query": "from a_index | eval date_trunc(1 year, dateField, extraArg)", "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." + "Error: [date_trunc] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | sort date_trunc(1 year, dateField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)", + "query": "row var = e()", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)", + "query": "row e()", "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": "from a_index | where e() > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField, extraArg)", + "query": "from a_index | eval var = e()", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval e()", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval e(extraArg)", "error": [ - "Error: [st_intersects] function expects exactly 2 arguments, got 3." + "Error: [e] function expects exactly 0 arguments, got 1." ], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoPointField, geoPointField)", + "query": "from a_index | sort e()", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoPointField)", + "query": "row var = ends_with(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geopoint(stringField), to_geopoint(stringField))", + "query": "row ends_with(\"a\", \"a\")", "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": "row var = ends_with(to_string(\"a\"), to_string(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoPointField, extraArg)", + "query": "row var = ends_with(5, 5)", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "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 = st_within(geoPointField, geoShapeField)", + "query": "from a_index | eval var = ends_with(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoPointField, geoShapeField)", + "query": "from a_index | eval ends_with(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_geopoint(stringField), geoShapeField)", + "query": "from a_index | eval var = ends_with(to_string(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(stringField, stringField)", + "query": "from a_index | eval ends_with(numberField, numberField)", "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]" + "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 st_within(geoPointField, geoShapeField, extraArg)", + "query": "from a_index | eval ends_with(stringField, stringField, extraArg)", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Error: [ends_with] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoShapeField, geoPointField)", + "query": "from a_index | sort ends_with(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoPointField)", + "query": "row var = floor(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoShapeField, to_geopoint(stringField))", + "query": "row floor(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(stringField, stringField)", + "query": "row var = floor(to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = floor(\"a\")", "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]" + "Argument of [floor] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoPointField, extraArg)", + "query": "from a_index | where floor(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where floor(stringField) > 0", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Argument of [floor] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoShapeField, geoShapeField)", + "query": "from a_index | eval var = floor(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoShapeField)", + "query": "from a_index | eval floor(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(geoShapeField, geoShapeField)", + "query": "from a_index | eval var = floor(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(stringField, stringField)", + "query": "from a_index | eval floor(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]" + "Argument of [floor] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval st_within(geoShapeField, geoShapeField, extraArg)", + "query": "from a_index | eval floor(numberField, extraArg)", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Error: [floor] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianPointField, cartesianPointField)", + "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 st_within(cartesianPointField, cartesianPointField)", + "query": "row var = greatest(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "query": "row greatest(\"a\")", "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 = greatest(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval greatest(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)", + "query": "from a_index | sort greatest(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField)", + "query": "row var = least(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(to_cartesianpoint(stringField), cartesianShapeField)", + "query": "row least(\"a\")", "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 = least(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField, extraArg)", - "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." - ], + "query": "from a_index | eval least(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)", + "query": "from a_index | sort least(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField)", + "query": "row var = left(\"a\", 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianShapeField, to_cartesianpoint(stringField))", + "query": "row left(\"a\", 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(stringField, stringField)", + "query": "row var = left(to_string(\"a\"), to_integer(\"a\"))", + "error": [], + "warning": [] + }, + { + "query": "row var = left(5, \"a\")", "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]" + "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 | eval st_within(cartesianShapeField, cartesianPointField, extraArg)", + "query": "from a_index | where length(left(stringField, numberField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(left(numberField, stringField)) > 0", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "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 = st_within(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | eval var = left(stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | eval left(stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)", + "query": "from a_index | eval var = left(to_string(stringField), to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_within(stringField, stringField)", + "query": "from a_index | eval left(numberField, 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]" + "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 st_within(cartesianShapeField, cartesianShapeField, extraArg)", + "query": "from a_index | eval left(stringField, numberField, extraArg)", "error": [ - "Error: [st_within] function expects exactly 2 arguments, got 3." + "Error: [left] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = st_x(geoPointField)", + "query": "from a_index | sort left(stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(geoPointField)", + "query": "row var = length(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(to_geopoint(stringField))", + "query": "row length(\"a\")", "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": "row var = length(to_string(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(geoPointField, extraArg)", + "query": "row var = length(5)", "error": [ - "Error: [st_x] function expects exactly one argument, got 2." + "Argument of [length] must be [string], found value [5] type [number]" ], "warning": [] }, { - "query": "from a_index | eval var = st_x(*)", + "query": "from a_index | where length(stringField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(numberField) > 0", "error": [ - "Using wildcards (*) in st_x is not allowed" + "Argument of [length] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | eval var = st_x(cartesianPointField)", + "query": "from a_index | eval var = length(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(cartesianPointField)", + "query": "from a_index | eval length(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_x(to_cartesianpoint(stringField))", + "query": "from a_index | eval var = length(to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_x(stringField)", + "query": "from a_index | eval length(numberField)", "error": [ - "Argument of [st_x] must be [geo_point], found value [stringField] type [string]" + "Argument of [length] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | eval st_x(cartesianPointField, extraArg)", + "query": "from a_index | eval length(stringField, extraArg)", "error": [ - "Error: [st_x] function expects exactly one argument, got 2." + "Error: [length] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = st_x(*)", + "query": "from a_index | eval var = length(*)", "error": [ - "Using wildcards (*) in st_x is not allowed" + "Using wildcards (*) in length is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = st_y(geoPointField)", + "query": "from a_index | sort length(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(geoPointField)", + "query": "row var = log(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(to_geopoint(stringField))", + "query": "row log(5, 5)", "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 = log(to_integer(\"a\"), to_integer(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(geoPointField, extraArg)", + "query": "row var = log(\"a\", \"a\")", "error": [ - "Error: [st_y] function expects exactly one argument, got 2." + "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 var = st_y(*)", + "query": "from a_index | where log(numberField, numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where log(stringField, stringField) > 0", "error": [ - "Using wildcards (*) in st_y is not allowed" + "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_y(cartesianPointField)", + "query": "from a_index | eval var = log(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(cartesianPointField)", + "query": "from a_index | eval log(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = st_y(to_cartesianpoint(stringField))", + "query": "from a_index | eval var = log(to_integer(stringField), to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval st_y(stringField)", + "query": "from a_index | eval log(stringField, stringField)", "error": [ - "Argument of [st_y] must be [geo_point], found value [stringField] type [string]" + "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 st_y(cartesianPointField, extraArg)", + "query": "from a_index | eval log(numberField, numberField, extraArg)", "error": [ - "Error: [st_y] function expects exactly one argument, got 2." + "Error: [log] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = st_y(*)", - "error": [ - "Using wildcards (*) in st_y is not allowed" - ], + "query": "from a_index | sort log(numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = starts_with(stringField, stringField)", + "query": "row var = log10(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(stringField, stringField)", + "query": "row log10(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = starts_with(to_string(stringField), to_string(stringField))", + "query": "row var = log10(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval starts_with(numberField, numberField)", + "query": "row var = log10(\"a\")", "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]" + "Argument of [log10] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval starts_with(stringField, stringField, extraArg)", + "query": "from a_index | where log10(numberField) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where log10(stringField) > 0", "error": [ - "Error: [starts_with] function expects exactly 2 arguments, got 3." + "Argument of [log10] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = substring(stringField, numberField, numberField)", + "query": "from a_index | eval var = log10(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval substring(stringField, numberField, numberField)", + "query": "from a_index | eval log10(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = substring(to_string(stringField), to_integer(stringField), to_integer(stringField))", + "query": "from a_index | eval var = log10(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval substring(numberField, stringField, stringField)", + "query": "from a_index | eval log10(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]" + "Argument of [log10] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval substring(stringField, numberField, numberField, extraArg)", + "query": "from a_index | eval log10(numberField, extraArg)", "error": [ - "Error: [substring] function expects exactly 3 arguments, got 4." + "Error: [log10] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = tan(numberField)", + "query": "from a_index | eval var = log10(*)", + "error": [ + "Using wildcards (*) in log10 is not allowed" + ], + "warning": [] + }, + { + "query": "from a_index | sort log10(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tan(numberField)", + "query": "row var = ltrim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = tan(to_integer(stringField))", + "query": "row ltrim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval tan(stringField)", - "error": [ - "Argument of [tan] must be [number], found value [stringField] type [string]" - ], + "query": "row var = ltrim(to_string(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval tan(numberField, extraArg)", + "query": "row var = ltrim(5)", "error": [ - "Error: [tan] function expects exactly one argument, got 2." + "Argument of [ltrim] must be [string], found value [5] type [number]" ], "warning": [] }, { - "query": "from a_index | eval var = tan(*)", + "query": "from a_index | where length(ltrim(stringField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(ltrim(numberField)) > 0", "error": [ - "Using wildcards (*) in tan is not allowed" + "Argument of [ltrim] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | eval var = tanh(numberField)", + "query": "from a_index | eval var = ltrim(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(numberField)", + "query": "from a_index | eval ltrim(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = tanh(to_integer(stringField))", + "query": "from a_index | eval var = ltrim(to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval tanh(stringField)", + "query": "from a_index | eval ltrim(numberField)", "error": [ - "Argument of [tanh] must be [number], found value [stringField] type [string]" + "Argument of [ltrim] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | eval tanh(numberField, extraArg)", + "query": "from a_index | eval ltrim(stringField, extraArg)", "error": [ - "Error: [tanh] function expects exactly one argument, got 2." + "Error: [ltrim] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = tanh(*)", + "query": "from a_index | eval var = ltrim(*)", "error": [ - "Using wildcards (*) in tanh is not allowed" + "Using wildcards (*) in ltrim is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = tau()", + "query": "from a_index | sort ltrim(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval tau()", + "query": "row var = mv_avg(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = tau()", + "query": "row mv_avg(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval tau()", + "query": "row var = mv_avg(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval tau(extraArg)", + "query": "row var = mv_avg(\"a\")", "error": [ - "Error: [tau] function expects exactly 0 arguments, got 1." + "Argument of [mv_avg] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(stringField)", + "query": "from a_index | where mv_avg(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_boolean(stringField)", - "error": [], + "query": "from a_index | where mv_avg(stringField) > 0", + "error": [ + "Argument of [mv_avg] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_bool(stringField)", + "query": "from a_index | eval var = mv_avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_boolean(*)", - "error": [ - "Using wildcards (*) in to_boolean is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_cartesianpoint(stringField)", + "query": "from a_index | eval mv_avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_cartesianpoint(stringField)", + "query": "from a_index | eval var = mv_avg(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianpoint(*)", + "query": "from a_index | eval mv_avg(stringField)", "error": [ - "Using wildcards (*) in to_cartesianpoint is not allowed" + "Argument of [mv_avg] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(stringField)", - "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 to_cartesianshape(stringField)", - "error": [], + "query": "from a_index | eval var = mv_avg(*)", + "error": [ + "Using wildcards (*) in mv_avg is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval var = to_cartesianshape(*)", - "error": [ - "Using wildcards (*) in to_cartesianshape is not allowed" - ], + "query": "from a_index | sort mv_avg(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(stringField)", + "query": "row var = mv_concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval to_datetime(stringField)", + "query": "row mv_concat(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dt(stringField)", + "query": "row var = mv_concat(to_string(\"a\"), to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_datetime(*)", + "query": "row var = mv_concat(5, 5)", "error": [ - "Using wildcards (*) in to_datetime is not allowed" + "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 | eval var = to_degrees(numberField)", + "query": "from a_index | where length(mv_concat(stringField, stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(numberField)", + "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": "from a_index | eval var = to_degrees(to_integer(stringField))", + "query": "from a_index | eval mv_concat(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(stringField)", - "error": [ - "Argument of [to_degrees] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_concat(to_string(stringField), to_string(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval to_degrees(numberField, extraArg)", + "query": "from a_index | eval mv_concat(numberField, numberField)", "error": [ - "Error: [to_degrees] function expects exactly one argument, got 2." + "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 = to_degrees(*)", + "query": "from a_index | eval mv_concat(stringField, stringField, extraArg)", "error": [ - "Using wildcards (*) in to_degrees is not allowed" + "Error: [mv_concat] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = to_double(stringField)", + "query": "from a_index | sort mv_concat(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_double(stringField)", + "query": "row var = mv_count(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_dbl(stringField)", + "query": "row mv_count(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_double(*)", - "error": [ - "Using wildcards (*) in to_double is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_geopoint(stringField)", + "query": "from a_index | eval var = mv_count(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geopoint(stringField)", + "query": "from a_index | eval mv_count(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geopoint(*)", + "query": "from a_index | eval var = mv_count(*)", "error": [ - "Using wildcards (*) in to_geopoint is not allowed" + "Using wildcards (*) in mv_count is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(stringField)", + "query": "from a_index | sort mv_count(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_geoshape(stringField)", + "query": "row var = mv_dedupe(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_geoshape(*)", - "error": [ - "Using wildcards (*) in to_geoshape is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_integer(stringField)", + "query": "row mv_dedupe(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval to_integer(stringField)", + "query": "from a_index | eval var = mv_dedupe(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_int(stringField)", + "query": "from a_index | eval mv_dedupe(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_integer(*)", + "query": "from a_index | eval var = mv_dedupe(*)", "error": [ - "Using wildcards (*) in to_integer is not allowed" + "Using wildcards (*) in mv_dedupe is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = to_ip(stringField)", + "query": "from a_index | sort mv_dedupe(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_ip(stringField)", + "query": "row var = mv_first(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ip(*)", - "error": [ - "Using wildcards (*) in to_ip is not allowed" - ], + "query": "row mv_first(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(stringField)", + "query": "from a_index | eval var = mv_first(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_long(stringField)", + "query": "from a_index | eval mv_first(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_long(*)", + "query": "from a_index | eval var = mv_first(*)", "error": [ - "Using wildcards (*) in to_long is not allowed" + "Using wildcards (*) in mv_first is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = to_lower(stringField)", + "query": "from a_index | sort mv_first(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(stringField)", + "query": "row var = mv_last(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_lower(to_string(stringField))", + "query": "row mv_last(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(numberField)", - "error": [ - "Argument of [to_lower] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = mv_last(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval to_lower(stringField, extraArg)", - "error": [ - "Error: [to_lower] function expects exactly one argument, got 2." - ], + "query": "from a_index | eval mv_last(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_lower(*)", + "query": "from a_index | eval var = mv_last(*)", "error": [ - "Using wildcards (*) in to_lower is not allowed" + "Using wildcards (*) in mv_last is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = to_radians(numberField)", + "query": "from a_index | sort mv_last(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_radians(numberField)", + "query": "row var = mv_max(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_radians(to_integer(stringField))", + "query": "row mv_max(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval to_radians(stringField)", - "error": [ - "Argument of [to_radians] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_max(stringField)", + "error": [], "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 | eval mv_max(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_radians(*)", + "query": "from a_index | eval var = mv_max(*)", "error": [ - "Using wildcards (*) in to_radians is not allowed" + "Using wildcards (*) in mv_max is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = to_string(stringField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_string(stringField)", + "query": "from a_index | sort mv_max(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_str(stringField)", + "query": "row var = mv_median(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_string(*)", - "error": [ - "Using wildcards (*) in to_string is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = to_unsigned_long(stringField)", + "query": "row mv_median(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval to_unsigned_long(stringField)", + "query": "row var = mv_median(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ul(stringField)", - "error": [], + "query": "row var = mv_median(\"a\")", + "error": [ + "Argument of [mv_median] must be [number], found value [\"a\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | eval var = to_ulong(stringField)", + "query": "from a_index | where mv_median(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_unsigned_long(*)", + "query": "from a_index | where mv_median(stringField) > 0", "error": [ - "Using wildcards (*) in to_unsigned_long is not allowed" + "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 | eval var = to_version(stringField)", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval to_version(stringField)", + "query": "from a_index | sort mv_median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_ver(stringField)", + "query": "row var = mv_min(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval var = to_version(*)", - "error": [ - "Using wildcards (*) in to_version is not allowed" - ], - "warning": [] - }, - { - "query": "from a_index | eval var = trim(stringField)", + "query": "row mv_min(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval trim(stringField)", + "query": "from a_index | eval var = mv_min(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = trim(to_string(stringField))", + "query": "from a_index | eval mv_min(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)", + "query": "from a_index | eval var = mv_min(*)", "error": [ - "Error: [trim] function expects exactly one argument, got 2." + "Using wildcards (*) in mv_min is not allowed" ], "warning": [] }, { - "query": "from a_index | eval var = trim(*)", - "error": [ - "Using wildcards (*) in trim is not allowed" - ], + "query": "from a_index | sort mv_min(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval log10(-1)", + "query": "row var = mv_slice(\"a\", 5, 5)", "error": [], - "warning": [ - "Log of a negative number results in null: -1" - ] + "warning": [] }, { - "query": "from a_index | eval log(-1)", + "query": "row mv_slice(\"a\", 5, 5)", "error": [], - "warning": [ - "Log of a negative number results in null: -1" - ] + "warning": [] }, { - "query": "from a_index | eval log(-1, 20)", + "query": "from a_index | eval var = mv_slice(stringField, numberField, numberField)", "error": [], - "warning": [ - "Log of a negative number results in null: -1" - ] + "warning": [] }, { - "query": "from a_index | eval log(-1, -20)", + "query": "from a_index | eval mv_slice(stringField, numberField, numberField)", "error": [], - "warning": [ - "Log of a negative number results in null: -1", - "Log of a negative number results in null: -20" - ] + "warning": [] }, { - "query": "from a_index | eval var0 = log(-1, -20)", + "query": "from a_index | sort mv_slice(stringField, numberField, numberField)", "error": [], - "warning": [ - "Log of a negative number results in null: -1", - "Log of a negative number results in null: -20" - ] + "warning": [] }, { - "query": "from a_index | eval numberField > 0", + "query": "row var = mv_sort(\"a\", \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField > 0", + "query": "row mv_sort(\"a\", \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField > 0)", + "query": "from a_index | eval var = mv_sort(stringField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField > 0))", + "query": "from a_index | eval mv_sort(stringField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 > 0", + "query": "from a_index | sort mv_sort(stringField, \"asc\")", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField > stringField", + "query": "row var = mv_sum(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField > numberField", + "query": "row mv_sum(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField > dateField", + "query": "row var = mv_sum(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField > booleanField", + "query": "row var = mv_sum(\"a\")", "error": [ - "Argument of [>] must be [number], found value [booleanField] type [boolean]", - "Argument of [>] must be [number], found value [booleanField] type [boolean]" + "Argument of [mv_sum] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval ipField > ipField", + "query": "from a_index | where mv_sum(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField > stringField", + "query": "from a_index | where mv_sum(stringField) > 0", "error": [ - "Argument of [>] must be [number], found value [stringField] type [string]" + "Argument of [mv_sum] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval stringField > numberField", - "error": [ - "Argument of [>] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = mv_sum(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField > \"2022\"", - "error": [ - "Argument of [>] must be [number], found value [\"2022\"] type [string]" - ], + "query": "from a_index | eval mv_sum(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField > stringField", - "error": [ - "Argument of [>] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval var = mv_sum(to_integer(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField > dateField", + "query": "from a_index | eval mv_sum(stringField)", "error": [ - "Argument of [>] must be [string], found value [dateField] type [date]" + "Argument of [mv_sum] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval stringField > 0", + "query": "from a_index | eval mv_sum(numberField, extraArg)", "error": [ - "Argument of [>] must be [number], found value [stringField] type [string]" + "Error: [mv_sum] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval stringField > now()", + "query": "from a_index | eval var = mv_sum(*)", "error": [ - "Argument of [>] must be [string], found value [now()] type [date]" + "Using wildcards (*) in mv_sum is not allowed" ], "warning": [] }, { - "query": "from a_index | eval dateField > \"2022\"", + "query": "from a_index | sort mv_sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" > dateField", + "query": "row var = mv_zip(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField > \"1.2.3\"", + "query": "row mv_zip(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" > versionField", + "query": "row var = mv_zip(to_string(\"a\"), to_string(\"a\"), to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField > \"true\"", + "query": "row var = mv_zip(5, 5, 5)", "error": [ - "Argument of [>] must be [string], found value [booleanField] type [boolean]" + "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 | eval \"true\" > booleanField", + "query": "from a_index | where length(mv_zip(stringField, stringField, stringField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(mv_zip(numberField, numberField, numberField)) > 0", "error": [ - "Argument of [>] must be [string], found value [booleanField] type [boolean]" + "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 | eval ipField > \"136.36.3.205\"", + "query": "from a_index | eval var = mv_zip(stringField, stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" > ipField", + "query": "from a_index | eval mv_zip(stringField, stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField >= 0", + "query": "from a_index | eval var = mv_zip(to_string(stringField), to_string(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField >= 0", - "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 | eval (numberField >= 0)", - "error": [], + "query": "from a_index | eval mv_zip(stringField, stringField, stringField, extraArg)", + "error": [ + "Error: [mv_zip] function expects exactly 3 arguments, got 4." + ], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField >= 0))", + "query": "from a_index | sort mv_zip(stringField, stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 >= 0", + "query": "row var = now()", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField >= stringField", + "query": "row now()", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField >= numberField", + "query": "from a_index | eval var = now()", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField >= dateField", + "query": "from a_index | eval now()", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField >= booleanField", + "query": "from a_index | eval now(extraArg)", "error": [ - "Argument of [>=] must be [number], found value [booleanField] type [boolean]", - "Argument of [>=] must be [number], found value [booleanField] type [boolean]" + "Error: [now] function expects exactly 0 arguments, got 1." ], "warning": [] }, { - "query": "from a_index | eval ipField >= ipField", + "query": "from a_index | sort now()", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField >= stringField", - "error": [ - "Argument of [>=] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval stringField >= numberField", - "error": [ - "Argument of [>=] must be [number], found value [stringField] type [string]" - ], + "query": "row var = pi()", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField >= \"2022\"", - "error": [ - "Argument of [>=] must be [number], found value [\"2022\"] type [string]" - ], + "query": "row pi()", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField >= stringField", - "error": [ - "Argument of [>=] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | where pi() > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField >= dateField", - "error": [ - "Argument of [>=] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval var = pi()", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField >= 0", - "error": [ - "Argument of [>=] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval pi()", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField >= now()", + "query": "from a_index | eval pi(extraArg)", "error": [ - "Argument of [>=] must be [string], found value [now()] type [date]" + "Error: [pi] function expects exactly 0 arguments, got 1." ], "warning": [] }, { - "query": "from a_index | eval dateField >= \"2022\"", + "query": "from a_index | sort pi()", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" >= dateField", + "query": "row var = pow(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField >= \"1.2.3\"", + "query": "row pow(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" >= versionField", + "query": "row var = pow(to_integer(\"a\"), to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField >= \"true\"", + "query": "row var = pow(\"a\", \"a\")", "error": [ - "Argument of [>=] must be [string], found value [booleanField] type [boolean]" + "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 \"true\" >= booleanField", - "error": [ - "Argument of [>=] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | where pow(numberField, numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField >= \"136.36.3.205\"", - "error": [], + "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]" + ], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" >= ipField", + "query": "from a_index | eval var = pow(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField < 0", + "query": "from a_index | eval pow(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField < 0", + "query": "from a_index | eval var = pow(to_integer(stringField), to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField < 0)", - "error": [], + "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]" + ], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField < 0))", - "error": [], + "query": "from a_index | eval pow(numberField, numberField, extraArg)", + "error": [ + "Error: [pow] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | eval 1 < 0", + "query": "from a_index | sort pow(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField < stringField", + "query": "row var = replace(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField < numberField", + "query": "row replace(\"a\", \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField < dateField", + "query": "row var = replace(to_string(\"a\"), to_string(\"a\"), to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField < booleanField", + "query": "row var = replace(5, 5, 5)", "error": [ - "Argument of [<] must be [number], found value [booleanField] type [boolean]", - "Argument of [<] must be [number], found value [booleanField] type [boolean]" + "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 | eval ipField < ipField", + "query": "from a_index | where length(replace(stringField, stringField, stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField < stringField", - "error": [ - "Argument of [<] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval stringField < numberField", + "query": "from a_index | where length(replace(numberField, numberField, numberField)) > 0", "error": [ - "Argument of [<] must be [number], found value [stringField] type [string]" + "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 | eval numberField < \"2022\"", - "error": [ - "Argument of [<] must be [number], found value [\"2022\"] type [string]" - ], + "query": "from a_index | eval var = replace(stringField, stringField, stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField < stringField", - "error": [ - "Argument of [<] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval replace(stringField, stringField, stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField < dateField", - "error": [ - "Argument of [<] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval var = replace(to_string(stringField), to_string(stringField), to_string(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField < 0", + "query": "from a_index | eval replace(numberField, numberField, numberField)", "error": [ - "Argument of [<] must be [number], found value [stringField] type [string]" + "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 | eval stringField < now()", + "query": "from a_index | eval replace(stringField, stringField, stringField, extraArg)", "error": [ - "Argument of [<] must be [string], found value [now()] type [date]" + "Error: [replace] function expects exactly 3 arguments, got 4." ], "warning": [] }, { - "query": "from a_index | eval dateField < \"2022\"", + "query": "from a_index | sort replace(stringField, stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" < dateField", + "query": "row var = right(\"a\", 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField < \"1.2.3\"", + "query": "row right(\"a\", 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" < versionField", + "query": "row var = right(to_string(\"a\"), to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField < \"true\"", + "query": "row var = right(5, \"a\")", "error": [ - "Argument of [<] must be [string], found value [booleanField] type [boolean]" + "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 | eval \"true\" < booleanField", - "error": [ - "Argument of [<] must be [string], found value [booleanField] type [boolean]" - ], + "query": "from a_index | where length(right(stringField, numberField)) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval ipField < \"136.36.3.205\"", - "error": [], + "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 \"136.36.3.205\" < ipField", + "query": "from a_index | eval var = right(stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField <= 0", + "query": "from a_index | eval right(stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField <= 0", + "query": "from a_index | eval var = right(to_string(stringField), to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField <= 0)", - "error": [], + "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 (NOT (numberField <= 0))", - "error": [], + "query": "from a_index | eval right(stringField, numberField, extraArg)", + "error": [ + "Error: [right] function expects exactly 2 arguments, got 3." + ], "warning": [] }, { - "query": "from a_index | eval 1 <= 0", + "query": "from a_index | sort right(stringField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField <= stringField", + "query": "row var = round(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField <= numberField", + "query": "row round(5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField <= dateField", + "query": "row var = round(to_integer(\"a\"), to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField <= booleanField", + "query": "row var = round(\"a\", \"a\")", "error": [ - "Argument of [<=] must be [number], found value [booleanField] type [boolean]", - "Argument of [<=] must be [number], found value [booleanField] type [boolean]" + "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 | eval ipField <= ipField", + "query": "from a_index | where round(numberField, numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField <= stringField", - "error": [ - "Argument of [<=] must be [number], found value [stringField] type [string]" - ], - "warning": [] - }, - { - "query": "from a_index | eval stringField <= numberField", + "query": "from a_index | where round(stringField, stringField) > 0", "error": [ - "Argument of [<=] must be [number], found value [stringField] type [string]" + "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 numberField <= \"2022\"", - "error": [ - "Argument of [<=] must be [number], found value [\"2022\"] type [string]" - ], + "query": "from a_index | eval var = round(numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField <= stringField", - "error": [ - "Argument of [<=] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval round(numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField <= dateField", - "error": [ - "Argument of [<=] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval var = round(to_integer(stringField), to_integer(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField <= 0", + "query": "from a_index | eval round(stringField, stringField)", "error": [ - "Argument of [<=] must be [number], found value [stringField] type [string]" + "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 stringField <= now()", + "query": "from a_index | eval round(numberField, numberField, extraArg)", "error": [ - "Argument of [<=] must be [string], found value [now()] type [date]" + "Error: [round] function expects no more than 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval dateField <= \"2022\"", + "query": "from a_index | sort round(numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" <= dateField", + "query": "row var = rtrim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField <= \"1.2.3\"", + "query": "row rtrim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" <= versionField", + "query": "row var = rtrim(to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField <= \"true\"", + "query": "row var = rtrim(5)", "error": [ - "Argument of [<=] must be [string], found value [booleanField] type [boolean]" + "Argument of [rtrim] must be [string], found value [5] type [number]" ], "warning": [] }, { - "query": "from a_index | eval \"true\" <= booleanField", + "query": "from a_index | where length(rtrim(stringField)) > 0", + "error": [], + "warning": [] + }, + { + "query": "from a_index | where length(rtrim(numberField)) > 0", "error": [ - "Argument of [<=] must be [string], found value [booleanField] type [boolean]" + "Argument of [rtrim] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | eval ipField <= \"136.36.3.205\"", + "query": "from a_index | eval var = rtrim(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval \"136.36.3.205\" <= ipField", + "query": "from a_index | eval rtrim(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField == 0", + "query": "from a_index | eval var = rtrim(to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField == 0", - "error": [], + "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 (numberField == 0)", - "error": [], + "query": "from a_index | eval rtrim(stringField, extraArg)", + "error": [ + "Error: [rtrim] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | eval (NOT (numberField == 0))", - "error": [], + "query": "from a_index | eval var = rtrim(*)", + "error": [ + "Using wildcards (*) in rtrim is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval 1 == 0", + "query": "from a_index | sort rtrim(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField == stringField", + "query": "row var = signum(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField == numberField", + "query": "row signum(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField == dateField", + "query": "row var = signum(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField == booleanField", - "error": [], + "query": "row var = signum(\"a\")", + "error": [ + "Argument of [signum] must be [number], found value [\"a\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | eval ipField == ipField", + "query": "from a_index | where signum(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField == stringField", + "query": "from a_index | where signum(stringField) > 0", "error": [ - "Argument of [==] must be [number], found value [stringField] type [string]" + "Argument of [signum] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval stringField == numberField", - "error": [ - "Argument of [==] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = signum(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField == \"2022\"", - "error": [ - "Argument of [==] must be [number], found value [\"2022\"] type [string]" - ], + "query": "from a_index | eval signum(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField == stringField", - "error": [ - "Argument of [==] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval var = signum(to_integer(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField == dateField", + "query": "from a_index | eval signum(stringField)", "error": [ - "Argument of [==] must be [string], found value [dateField] type [date]" + "Argument of [signum] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval stringField == 0", + "query": "from a_index | eval signum(numberField, extraArg)", "error": [ - "Argument of [==] must be [number], found value [stringField] type [string]" + "Error: [signum] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval stringField == now()", + "query": "from a_index | eval var = signum(*)", "error": [ - "Argument of [==] must be [string], found value [now()] type [date]" + "Using wildcards (*) in signum is not allowed" ], "warning": [] }, { - "query": "from a_index | eval dateField == \"2022\"", + "query": "from a_index | sort signum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" == dateField", + "query": "row var = sin(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField == \"1.2.3\"", + "query": "row sin(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" == versionField", + "query": "row var = sin(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField == \"true\"", - "error": [], + "query": "row var = sin(\"a\")", + "error": [ + "Argument of [sin] must be [number], found value [\"a\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | eval \"true\" == booleanField", + "query": "from a_index | where sin(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField == \"136.36.3.205\"", - "error": [], + "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 \"136.36.3.205\" == ipField", + "query": "from a_index | eval var = sin(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField != 0", + "query": "from a_index | eval sin(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField != 0", + "query": "from a_index | eval var = sin(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField != 0)", - "error": [], + "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 (NOT (numberField != 0))", - "error": [], + "query": "from a_index | eval sin(numberField, extraArg)", + "error": [ + "Error: [sin] function expects exactly one argument, got 2." + ], "warning": [] }, { - "query": "from a_index | eval 1 != 0", - "error": [], + "query": "from a_index | eval var = sin(*)", + "error": [ + "Using wildcards (*) in sin is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval stringField != stringField", + "query": "from a_index | sort sin(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField != numberField", + "query": "row var = sinh(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField != dateField", + "query": "row sinh(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField != booleanField", + "query": "row var = sinh(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField != ipField", + "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 | eval numberField != stringField", + "query": "from a_index | where sinh(stringField) > 0", "error": [ - "Argument of [!=] must be [number], found value [stringField] type [string]" + "Argument of [sinh] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval stringField != numberField", - "error": [ - "Argument of [!=] must be [number], found value [stringField] type [string]" - ], + "query": "from a_index | eval var = sinh(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField != \"2022\"", - "error": [ - "Argument of [!=] must be [number], found value [\"2022\"] type [string]" - ], + "query": "from a_index | eval sinh(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval dateField != stringField", - "error": [ - "Argument of [!=] must be [string], found value [dateField] type [date]" - ], + "query": "from a_index | eval var = sinh(to_integer(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField != dateField", + "query": "from a_index | eval sinh(stringField)", "error": [ - "Argument of [!=] must be [string], found value [dateField] type [date]" + "Argument of [sinh] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval stringField != 0", + "query": "from a_index | eval sinh(numberField, extraArg)", "error": [ - "Argument of [!=] must be [number], found value [stringField] type [string]" + "Error: [sinh] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval stringField != now()", + "query": "from a_index | eval var = sinh(*)", "error": [ - "Argument of [!=] must be [string], found value [now()] type [date]" + "Using wildcards (*) in sinh is not allowed" ], "warning": [] }, { - "query": "from a_index | eval dateField != \"2022\"", + "query": "from a_index | sort sinh(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval \"2022\" != dateField", + "query": "row var = split(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField != \"1.2.3\"", + "query": "row split(\"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval \"1.2.3\" != versionField", + "query": "row var = split(to_string(\"a\"), to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField != \"true\"", - "error": [], + "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 | eval \"true\" != booleanField", + "query": "from a_index | where length(split(stringField, stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | eval ipField != \"136.36.3.205\"", - "error": [], + "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 \"136.36.3.205\" != ipField", + "query": "from a_index | eval var = split(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval versionField in (\"1.2.3\", \"4.5.6\", to_version(\"2.3.2\"))", + "query": "from a_index | eval split(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | eval dateField in (\"2023-12-12\", \"2024-12-12\", date_parse(\"yyyy-MM-dd\", \"2025-12-12\"))", + "query": "from a_index | eval var = split(to_string(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval booleanField in (\"true\", \"false\", false)", - "error": [], + "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 ipField in (\"136.36.3.205\", \"136.36.3.206\", to_ip(\"136.36.3.207\"))", + "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": "from a_index | eval numberField + 1", + "query": "row var = sqrt(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField + 1)", + "query": "row sqrt(5)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 + 1", + "query": "row var = sqrt(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval now() + now()", + "query": "row var = sqrt(\"a\")", "error": [ - "Argument of [+] must be [time_literal], found value [now()] type [date]" + "Argument of [sqrt] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval 1 + \"1\"", - "error": [ - "Argument of [+] must be [number], found value [\"1\"] type [string]" - ], + "query": "from a_index | where sqrt(numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"1\" + 1", + "query": "from a_index | where sqrt(stringField) > 0", "error": [ - "Argument of [+] must be [number], found value [\"1\"] type [string]" + "Argument of [sqrt] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval numberField - 1", + "query": "from a_index | eval var = sqrt(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField - 1)", + "query": "from a_index | eval sqrt(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 - 1", + "query": "from a_index | eval var = sqrt(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval now() - now()", + "query": "from a_index | eval sqrt(stringField)", "error": [ - "Argument of [-] must be [time_literal], found value [now()] type [date]" + "Argument of [sqrt] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval 1 - \"1\"", + "query": "from a_index | eval sqrt(numberField, extraArg)", "error": [ - "Argument of [-] must be [number], found value [\"1\"] type [string]" + "Error: [sqrt] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval \"1\" - 1", + "query": "from a_index | eval var = sqrt(*)", "error": [ - "Argument of [-] must be [number], found value [\"1\"] type [string]" + "Using wildcards (*) in sqrt is not allowed" ], "warning": [] }, { - "query": "from a_index | eval numberField * 1", + "query": "from a_index | sort sqrt(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField * 1)", + "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 * 1", + "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval now() * now()", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [now()] type [date]" - ], - "warning": [] - }, - { - "query": "from a_index | eval 1 * \"1\"", - "error": [ - "Argument of [*] must be [number], found value [\"1\"] type [string]" - ], + "query": "row var = st_contains(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"1\" * 1", + "query": "row var = st_contains(\"a\", \"a\")", "error": [ - "Argument of [*] must be [number], found value [\"1\"] type [string]" + "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]" ], "warning": [] }, { - "query": "from a_index | eval numberField / 1", - "error": [], - "warning": [] - }, - { - "query": "from a_index | eval (numberField / 1)", + "query": "row var = st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 / 1", + "query": "row st_contains(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval now() / now()", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [now()] type [date]" - ], + "query": "row var = st_contains(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 / \"1\"", - "error": [ - "Argument of [/] must be [number], found value [\"1\"] type [string]" - ], + "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"1\" / 1", - "error": [ - "Argument of [/] must be [number], found value [\"1\"] type [string]" - ], + "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField % 1", + "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval (numberField % 1)", + "query": "row var = st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 % 1", + "query": "row st_contains(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval now() % now()", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [now()] type [date]" - ], + "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 % \"1\"", - "error": [ - "Argument of [%] must be [number], found value [\"1\"] type [string]" - ], + "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval \"1\" % 1", - "error": [ - "Argument of [%] must be [number], found value [\"1\"] type [string]" - ], + "query": "row var = st_contains(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1/0", + "query": "row var = st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], - "warning": [ - "Cannot divide by zero: 1/0" - ] + "warning": [] }, { - "query": "from a_index | eval var = 1/0", + "query": "row st_contains(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], - "warning": [ - "Cannot divide by zero: 1/0" - ] + "warning": [] }, { - "query": "from a_index | eval 1 + 1/0", + "query": "row var = st_contains(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], - "warning": [ - "Cannot divide by zero: 1/0" - ] + "warning": [] }, { - "query": "from a_index | eval 1%0", + "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", "error": [], - "warning": [ - "Module by zero can return null value: 1%0" - ] + "warning": [] }, { - "query": "from a_index | eval var = 1%0", + "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", "error": [], - "warning": [ - "Module by zero can return null value: 1%0" - ] + "warning": [] }, { - "query": "from a_index | eval 1 + 1%0", + "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", "error": [], - "warning": [ - "Module by zero can return null value: 1%0" - ] + "warning": [] }, { - "query": "from a_index | eval stringField like \"?a\"", + "query": "row var = st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField NOT like \"?a\"", + "query": "row st_contains(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT stringField like \"?a\"", + "query": "from a_index | eval var = st_contains(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT stringField NOT like \"?a\"", + "query": "from a_index | eval st_contains(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField like \"?a\"", - "error": [ - "Argument of [like] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = st_contains(to_geopoint(stringField), to_geopoint(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField NOT like \"?a\"", + "query": "from a_index | eval st_contains(stringField, stringField)", "error": [ - "Argument of [not_like] must be [string], found value [numberField] type [number]" + "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]" ], "warning": [] }, { - "query": "from a_index | eval NOT numberField like \"?a\"", + "query": "from a_index | eval st_contains(geoPointField, geoPointField, extraArg)", "error": [ - "Argument of [like] must be [string], found value [numberField] type [number]" + "Error: [st_contains] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval NOT numberField NOT like \"?a\"", - "error": [ - "Argument of [not_like] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = st_contains(geoPointField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField rlike \"?a\"", + "query": "from a_index | eval st_contains(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField NOT rlike \"?a\"", + "query": "from a_index | eval var = st_contains(to_geopoint(stringField), geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval NOT stringField rlike \"?a\"", + "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 NOT stringField NOT rlike \"?a\"", + "query": "from a_index | eval st_contains(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField rlike \"?a\"", - "error": [ - "Argument of [rlike] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = st_contains(geoShapeField, to_geopoint(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval numberField NOT rlike \"?a\"", + "query": "from a_index | eval st_contains(geoShapeField, geoPointField, extraArg)", "error": [ - "Argument of [not_rlike] must be [string], found value [numberField] type [number]" + "Error: [st_contains] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval NOT numberField rlike \"?a\"", - "error": [ - "Argument of [rlike] must be [string], found value [numberField] type [number]" - ], + "query": "from a_index | eval var = st_contains(geoShapeField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval NOT numberField NOT rlike \"?a\"", + "query": "from a_index | eval st_contains(geoShapeField, geoShapeField)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | eval st_contains(geoShapeField, geoShapeField, extraArg)", "error": [ - "Argument of [not_rlike] must be [string], found value [numberField] type [number]" + "Error: [st_contains] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval 1 in (1, 2, 3)", + "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField in (1, 2, 3)", + "query": "from a_index | eval st_contains(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField not in (1, 2, 3)", + "query": "from a_index | eval var = st_contains(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField not in (1, 2, 3, numberField)", - "error": [], + "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 1 in (1, 2, 3, round(numberField))", + "query": "from a_index | eval var = st_contains(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval \"a\" in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval st_contains(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval var = st_contains(to_cartesianpoint(stringField), cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval stringField not in (\"a\", \"b\", \"c\")", - "error": [], + "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 stringField not in (\"a\", \"b\", \"c\", stringField)", + "query": "from a_index | eval var = st_contains(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval st_contains(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField in (\"a\", \"b\", \"c\")", + "query": "from a_index | eval var = st_contains(cartesianShapeField, to_cartesianpoint(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval numberField not in (\"a\", \"b\", \"c\")", + "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 numberField not in (1, 2, 3, stringField)", + "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval avg(numberField)", + "query": "from a_index | eval st_contains(cartesianShapeField, cartesianShapeField, extraArg)", "error": [ - "EVAL does not support function avg" + "Error: [st_contains] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | stats avg(numberField) | eval `avg(numberField)` + 1", + "query": "from a_index | sort st_contains(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval not", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}", - "Error: [not] function expects exactly one argument, got 0." - ], + "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval in", - "error": [ - "SyntaxError: mismatched input 'in' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField in stringField", - "error": [ - "SyntaxError: missing '(' at 'stringField'", - "SyntaxError: mismatched input '' expecting {',', ')'}" - ], + "query": "row var = st_disjoint(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval stringField in stringField)", + "query": "row var = st_disjoint(\"a\", \"a\")", "error": [ - "SyntaxError: missing '(' at 'stringField'", - "Error: [in] function expects exactly 2 arguments, got 1." + "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]" ], "warning": [] }, { - "query": "from a_index | eval stringField not in stringField", - "error": [ - "SyntaxError: missing '(' at 'stringField'", - "SyntaxError: mismatched input '' expecting {',', ')'}" - ], + "query": "row var = st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"bogus\")", + "query": "row st_disjoint(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], - "warning": [ - "Invalid option [\"bogus\"] for mv_sort. Supported options: [\"asc\", \"desc\"]." - ] + "warning": [] }, { - "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"ASC\")", + "query": "row var = st_disjoint(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval mv_sort([\"a\", \"b\"], \"DESC\")", + "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval result = case(false, 0, 1), round(result)", + "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval result = case(false, 0, 1) | stats sum(result)", + "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval result = case(false, 0, 1) | stats var0 = sum(result)", + "query": "row var = st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval round(case(false, 0, 1))", + "query": "row st_disjoint(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 anno", - "error": [ - "EVAL does not support [date_period] in expression [1 anno]" - ], + "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = 1 anno", - "error": [ - "Unexpected time interval qualifier: 'anno'" - ], + "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": "from a_index | eval now() + 1 anno", - "error": [ - "Unexpected time interval qualifier: 'anno'" - ], + "query": "row var = st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 year", - "error": [ - "EVAL does not support [date_period] in expression [1 year]" - ], + "query": "row st_disjoint(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 year", - "error": [ - "EVAL does not support [date_period] in expression [1 year]" - ], + "query": "row var = st_disjoint(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 year", + "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 year", + "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 YEAR", + "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Year", + "query": "row var = st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 year", + "query": "row st_disjoint(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 year + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 year] type [duration]" - ], + "query": "from a_index | eval var = st_disjoint(geoPointField, geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 year", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 year] type [duration]" - ], + "query": "from a_index | eval st_disjoint(geoPointField, geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 year", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 year] type [duration]" - ], + "query": "from a_index | eval var = st_disjoint(to_geopoint(stringField), to_geopoint(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 year", + "query": "from a_index | eval st_disjoint(stringField, stringField)", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 year] type [duration]" + "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]" ], "warning": [] }, { - "query": "from a_index | eval 1 years", + "query": "from a_index | eval st_disjoint(geoPointField, geoPointField, extraArg)", "error": [ - "EVAL does not support [date_period] in expression [1 years]" + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval 1 years", - "error": [ - "EVAL does not support [date_period] in expression [1 years]" - ], + "query": "from a_index | eval var = st_disjoint(geoPointField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 years", + "query": "from a_index | eval st_disjoint(geoPointField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 years", + "query": "from a_index | eval var = st_disjoint(to_geopoint(stringField), geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 YEARS", - "error": [], + "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 = dateField - 1 Years", + "query": "from a_index | eval var = st_disjoint(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 years", + "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 years + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 years] type [duration]" - ], + "query": "from a_index | eval var = st_disjoint(geoShapeField, to_geopoint(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 years", + "query": "from a_index | eval st_disjoint(geoShapeField, geoPointField, extraArg)", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 years] type [duration]" + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 years", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 years] type [duration]" - ], + "query": "from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 years", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 years] type [duration]" - ], + "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 month", + "query": "from a_index | eval st_disjoint(geoShapeField, geoShapeField, extraArg)", "error": [ - "EVAL does not support [date_period] in expression [1 month]" + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval 1 month", - "error": [ - "EVAL does not support [date_period] in expression [1 month]" - ], + "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 month", + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 month", + "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MONTH", - "error": [], + "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 = dateField - 1 Month", + "query": "from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 month", + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 month + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 month] type [duration]" - ], + "query": "from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 month", + "query": "from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField, extraArg)", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 month] type [duration]" + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 month", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 month] type [duration]" - ], + "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 month", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 month] type [duration]" - ], + "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 months", - "error": [ - "EVAL does not support [date_period] in expression [1 months]" - ], + "query": "from a_index | eval var = st_disjoint(cartesianShapeField, to_cartesianpoint(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 months", + "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField, extraArg)", "error": [ - "EVAL does not support [date_period] in expression [1 months]" + "Error: [st_disjoint] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 months", + "query": "from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 months", + "query": "from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MONTHS", + "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": "from a_index | eval var = dateField - 1 Months", + "query": "row var = st_intersects(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 months", + "query": "row st_intersects(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 months + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 months] type [duration]" - ], + "query": "row var = st_intersects(to_geopoint(\"a\"), to_geopoint(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 months", + "query": "row var = st_intersects(\"a\", \"a\")", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 months] type [duration]" + "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]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 months", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 months] type [duration]" - ], + "query": "row var = st_intersects(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 months", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 months] type [duration]" - ], + "query": "row st_intersects(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 week", - "error": [ - "EVAL does not support [date_period] in expression [1 week]" - ], + "query": "row var = st_intersects(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 week", - "error": [ - "EVAL does not support [date_period] in expression [1 week]" - ], + "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 week", + "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 week", + "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 WEEK", + "query": "row var = st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Week", + "query": "row st_intersects(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 week", + "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 week + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 week] type [duration]" - ], + "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 week", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 week] type [duration]" - ], + "query": "row var = st_intersects(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 week", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 week] type [duration]" - ], + "query": "row var = st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 week", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 week] type [duration]" - ], + "query": "row st_intersects(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 weeks", - "error": [ - "EVAL does not support [date_period] in expression [1 weeks]" - ], + "query": "row var = st_intersects(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 weeks", - "error": [ - "EVAL does not support [date_period] in expression [1 weeks]" - ], + "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 weeks", + "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 weeks", + "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 WEEKS", + "query": "row var = st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Weeks", + "query": "row st_intersects(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 weeks", + "query": "from a_index | eval var = st_intersects(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 weeks + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 weeks] type [duration]" - ], + "query": "from a_index | eval st_intersects(geoPointField, geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 weeks", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 weeks] type [duration]" - ], + "query": "from a_index | eval var = st_intersects(to_geopoint(stringField), to_geopoint(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 weeks", + "query": "from a_index | eval st_intersects(stringField, stringField)", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 weeks] type [duration]" + "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]" ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 weeks", + "query": "from a_index | eval st_intersects(geoPointField, geoPointField, extraArg)", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 weeks] type [duration]" + "Error: [st_intersects] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval 1 day", - "error": [ - "EVAL does not support [date_period] in expression [1 day]" - ], + "query": "from a_index | eval var = st_intersects(geoPointField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 day", - "error": [ - "EVAL does not support [date_period] in expression [1 day]" - ], + "query": "from a_index | eval st_intersects(geoPointField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 day", + "query": "from a_index | eval var = st_intersects(to_geopoint(stringField), geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 day", - "error": [], + "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 = dateField - 1 DAY", + "query": "from a_index | eval var = st_intersects(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Day", + "query": "from a_index | eval st_intersects(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 day", + "query": "from a_index | eval var = st_intersects(geoShapeField, to_geopoint(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 day + 1 year", + "query": "from a_index | eval st_intersects(geoShapeField, geoPointField, extraArg)", "error": [ - "Argument of [+] must be [date], found value [1 day] type [duration]" + "Error: [st_intersects] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 day", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 day] type [duration]" - ], + "query": "from a_index | eval var = st_intersects(geoShapeField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 day", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 day] type [duration]" - ], + "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 day", + "query": "from a_index | eval st_intersects(geoShapeField, geoShapeField, extraArg)", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 day] type [duration]" + "Error: [st_intersects] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval 1 days", - "error": [ - "EVAL does not support [date_period] in expression [1 days]" - ], + "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 days", - "error": [ - "EVAL does not support [date_period] in expression [1 days]" - ], + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 days", + "query": "from a_index | eval var = st_intersects(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 days", - "error": [], + "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 = dateField - 1 DAYS", + "query": "from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Days", + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 days", + "query": "from a_index | eval var = st_intersects(to_cartesianpoint(stringField), cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 days + 1 year", + "query": "from a_index | eval st_intersects(cartesianPointField, cartesianShapeField, extraArg)", "error": [ - "Argument of [+] must be [date], found value [1 days] type [duration]" + "Error: [st_intersects] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 days", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 days] type [duration]" - ], + "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 days", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 days] type [duration]" - ], + "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 days", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 days] type [duration]" - ], + "query": "from a_index | eval var = st_intersects(cartesianShapeField, to_cartesianpoint(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 hour", + "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianPointField, extraArg)", "error": [ - "EVAL does not support [date_period] in expression [1 hour]" + "Error: [st_intersects] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval 1 hour", - "error": [ - "EVAL does not support [date_period] in expression [1 hour]" - ], + "query": "from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 hour", + "query": "from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 hour", + "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": "from a_index | eval var = dateField - 1 HOUR", + "query": "row var = st_within(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Hour", + "query": "row st_within(to_geopoint(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 hour", + "query": "row var = st_within(to_geopoint(\"a\"), to_geopoint(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 hour + 1 year", + "query": "row var = st_within(\"a\", \"a\")", "error": [ - "Argument of [+] must be [date], found value [1 hour] type [duration]" + "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]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 hour", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 hour] type [duration]" - ], + "query": "row var = st_within(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 hour", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 hour] type [duration]" - ], + "query": "row st_within(to_geopoint(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 hour", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 hour] type [duration]" - ], + "query": "row var = st_within(to_geopoint(\"a\"), to_geoshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 hours", - "error": [ - "EVAL does not support [date_period] in expression [1 hours]" - ], + "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 hours", - "error": [ - "EVAL does not support [date_period] in expression [1 hours]" - ], + "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 hours", + "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geopoint(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 hours", + "query": "row var = st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 HOURS", + "query": "row st_within(to_geoshape(\"POINT (30 10)\"), to_geoshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Hours", + "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 hours", + "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 hours + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 hours] type [duration]" - ], + "query": "row var = st_within(to_cartesianpoint(\"a\"), to_cartesianpoint(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 hours", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 hours] type [duration]" - ], + "query": "row var = st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 hours", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 hours] type [duration]" - ], + "query": "row st_within(to_cartesianpoint(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 hours", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 hours] type [duration]" - ], + "query": "row var = st_within(to_cartesianpoint(\"a\"), to_cartesianshape(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 minute", - "error": [ - "EVAL does not support [date_period] in expression [1 minute]" - ], + "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": "from a_index | eval 1 minute", - "error": [ - "EVAL does not support [date_period] in expression [1 minute]" - ], + "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianpoint(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 minute", + "query": "row var = st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 minute", + "query": "row st_within(to_cartesianshape(\"POINT (30 10)\"), to_cartesianshape(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MINUTE", + "query": "from a_index | eval var = st_within(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Minute", + "query": "from a_index | eval st_within(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 minute", + "query": "from a_index | eval var = st_within(to_geopoint(stringField), to_geopoint(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 minute + 1 year", + "query": "from a_index | eval st_within(stringField, stringField)", "error": [ - "Argument of [+] must be [date], found value [1 minute] type [duration]" + "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]" ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 minute", + "query": "from a_index | eval st_within(geoPointField, geoPointField, extraArg)", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 minute] type [duration]" + "Error: [st_within] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 minute", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 minute] type [duration]" - ], + "query": "from a_index | eval var = st_within(geoPointField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 minute", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 minute] type [duration]" - ], + "query": "from a_index | eval st_within(geoPointField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 minutes", - "error": [ - "EVAL does not support [date_period] in expression [1 minutes]" - ], + "query": "from a_index | eval var = st_within(to_geopoint(stringField), geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 minutes", + "query": "from a_index | eval st_within(geoPointField, geoShapeField, extraArg)", "error": [ - "EVAL does not support [date_period] in expression [1 minutes]" + "Error: [st_within] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 minutes", + "query": "from a_index | eval var = st_within(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 minutes", + "query": "from a_index | eval st_within(geoShapeField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MINUTES", + "query": "from a_index | eval var = st_within(geoShapeField, to_geopoint(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Minutes", - "error": [], + "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 = dateField + 1 minutes", + "query": "from a_index | eval var = st_within(geoShapeField, geoShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 minutes + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 minutes] type [duration]" - ], + "query": "from a_index | eval st_within(geoShapeField, geoShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 minutes", + "query": "from a_index | eval st_within(geoShapeField, geoShapeField, extraArg)", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 minutes] type [duration]" + "Error: [st_within] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 minutes", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 minutes] type [duration]" - ], + "query": "from a_index | eval var = st_within(cartesianPointField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 minutes", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 minutes] type [duration]" - ], + "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 second", - "error": [ - "EVAL does not support [date_period] in expression [1 second]" - ], + "query": "from a_index | eval var = st_within(to_cartesianpoint(stringField), to_cartesianpoint(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 second", + "query": "from a_index | eval st_within(cartesianPointField, cartesianPointField, extraArg)", "error": [ - "EVAL does not support [date_period] in expression [1 second]" + "Error: [st_within] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 second", + "query": "from a_index | eval var = st_within(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 second", + "query": "from a_index | eval st_within(cartesianPointField, cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 SECOND", + "query": "from a_index | eval var = st_within(to_cartesianpoint(stringField), cartesianShapeField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Second", - "error": [], + "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 = dateField + 1 second", + "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 second + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 second] type [duration]" - ], + "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 second", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 second] type [duration]" - ], + "query": "from a_index | eval var = st_within(cartesianShapeField, to_cartesianpoint(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 second", + "query": "from a_index | eval st_within(cartesianShapeField, cartesianPointField, extraArg)", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 second] type [duration]" + "Error: [st_within] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 second", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 second] type [duration]" - ], + "query": "from a_index | eval var = st_within(cartesianShapeField, cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 seconds", - "error": [ - "EVAL does not support [date_period] in expression [1 seconds]" - ], + "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 seconds", + "query": "from a_index | eval st_within(cartesianShapeField, cartesianShapeField, extraArg)", "error": [ - "EVAL does not support [date_period] in expression [1 seconds]" + "Error: [st_within] function expects exactly 2 arguments, got 3." ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 seconds", + "query": "from a_index | sort st_within(geoPointField, geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 seconds", + "query": "row var = st_x(to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 SECONDS", + "query": "row st_x(to_geopoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Seconds", + "query": "row var = st_x(to_geopoint(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 seconds", + "query": "row var = st_x(\"a\")", + "error": [ + "Argument of [st_x] must be [geo_point], found value [\"a\"] type [string]" + ], + "warning": [] + }, + { + "query": "row var = st_x(to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 seconds + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 seconds] type [duration]" - ], + "query": "row st_x(to_cartesianpoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 seconds", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 seconds] type [duration]" - ], + "query": "row var = st_x(to_cartesianpoint(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 seconds", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 seconds] type [duration]" - ], + "query": "from a_index | eval var = st_x(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 seconds", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 seconds] type [duration]" - ], + "query": "from a_index | eval st_x(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 millisecond", - "error": [ - "EVAL does not support [date_period] in expression [1 millisecond]" - ], + "query": "from a_index | eval var = st_x(to_geopoint(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 millisecond", + "query": "from a_index | eval st_x(stringField)", "error": [ - "EVAL does not support [date_period] in expression [1 millisecond]" + "Argument of [st_x] must be [geo_point], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 millisecond", - "error": [], + "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 = dateField - 1 millisecond", - "error": [], + "query": "from a_index | eval var = st_x(*)", + "error": [ + "Using wildcards (*) in st_x is not allowed" + ], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MILLISECOND", + "query": "from a_index | eval var = st_x(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Millisecond", + "query": "from a_index | eval st_x(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 millisecond", + "query": "from a_index | eval var = st_x(to_cartesianpoint(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 millisecond + 1 year", + "query": "from a_index | eval st_x(cartesianPointField, extraArg)", "error": [ - "Argument of [+] must be [date], found value [1 millisecond] type [duration]" + "Error: [st_x] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 millisecond", - "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 millisecond] type [duration]" - ], + "query": "from a_index | sort st_x(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 millisecond", - "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 millisecond] type [duration]" - ], + "query": "row var = st_y(to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 millisecond", - "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 millisecond] type [duration]" - ], + "query": "row st_y(to_geopoint(\"POINT (30 10)\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 milliseconds", - "error": [ - "EVAL does not support [date_period] in expression [1 milliseconds]" - ], + "query": "row var = st_y(to_geopoint(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | eval 1 milliseconds", + "query": "row var = st_y(\"a\")", "error": [ - "EVAL does not support [date_period] in expression [1 milliseconds]" + "Argument of [st_y] must be [geo_point], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = now() - 1 milliseconds", + "query": "row var = st_y(to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 milliseconds", + "query": "row st_y(to_cartesianpoint(\"POINT (30 10)\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 MILLISECONDS", + "query": "row var = st_y(to_cartesianpoint(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField - 1 Milliseconds", + "query": "from a_index | eval var = st_y(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval var = dateField + 1 milliseconds", + "query": "from a_index | eval st_y(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | eval 1 milliseconds + 1 year", - "error": [ - "Argument of [+] must be [date], found value [1 milliseconds] type [duration]" - ], + "query": "from a_index | eval var = st_y(to_geopoint(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | eval var = now() * 1 milliseconds", + "query": "from a_index | eval st_y(stringField)", "error": [ - "Argument of [*] must be [number], found value [now()] type [date]", - "Argument of [*] must be [number], found value [1 milliseconds] type [duration]" + "Argument of [st_y] must be [geo_point], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | eval var = now() / 1 milliseconds", + "query": "from a_index | eval st_y(geoPointField, extraArg)", "error": [ - "Argument of [/] must be [number], found value [now()] type [date]", - "Argument of [/] must be [number], found value [1 milliseconds] type [duration]" + "Error: [st_y] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | eval var = now() % 1 milliseconds", + "query": "from a_index | eval var = st_y(*)", "error": [ - "Argument of [%] must be [number], found value [now()] type [date]", - "Argument of [%] must be [number], found value [1 milliseconds] type [duration]" + "Using wildcards (*) in st_y is not allowed" ], "warning": [] }, { - "query": "from a_index | stats ", - "error": [ - "At least one aggregation or grouping expression required in [STATS]" - ], + "query": "from a_index | eval var = st_y(cartesianPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats by stringField", + "query": "from a_index | eval st_y(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | stats by ", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | eval var = st_y(to_cartesianpoint(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats numberField ", + "query": "from a_index | eval st_y(cartesianPointField, extraArg)", "error": [ - "Expected an aggregate function or group but got [numberField] of type [FieldAttribute]" + "Error: [st_y] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats numberField=", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "from a_index | sort st_y(geoPointField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats numberField=5 by ", - "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" - ], + "query": "row var = starts_with(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) by wrongField", - "error": [ - "Unknown column [wrongField]" - ], + "query": "row starts_with(\"a\", \"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) by wrongField + 1", - "error": [ - "Unknown column [wrongField]" - ], + "query": "row var = starts_with(to_string(\"a\"), to_string(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) by var0 = wrongField + 1", + "query": "row var = starts_with(5, 5)", "error": [ - "Unknown column [wrongField]" + "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 | stats avg(numberField) by 1", + "query": "from a_index | eval var = starts_with(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) by percentile(numberField)", - "error": [ - "STATS BY does not support function percentile" - ], - "warning": [] - }, - { - "query": "from a_index | stats count(`numberField`)", + "query": "from a_index | eval starts_with(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats count(stringField == \"a\" or null)", + "query": "from a_index | eval var = starts_with(to_string(stringField), to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | stats count(`numberField`) | keep `count(``numberField``)` ", - "error": [], + "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 | stats count(`numberField`) | drop `count(``numberField``)` ", - "error": [], + "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 | stats count(`numberField`) | eval `count(``numberField``)` ", + "query": "from a_index | sort starts_with(stringField, stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) by stringField, percentile(numberField) by ipField", - "error": [ - "SyntaxError: mismatched input 'by' expecting ", - "STATS BY does not support function percentile" - ], + "query": "row var = substring(\"a\", 5, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 50) by ipField", + "query": "row substring(\"a\", 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 50) BY ipField", + "query": "row var = substring(to_string(\"a\"), to_integer(\"a\"), to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) + percentile(numberField, 50) BY ipField", - "error": [], + "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 | stats avg(numberField) - percentile(numberField, 50) BY ipField", + "query": "from a_index | where length(substring(stringField, numberField, numberField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) * percentile(numberField, 50) BY ipField", - "error": [], + "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 | stats avg(numberField) / percentile(numberField, 50) BY ipField", + "query": "from a_index | eval var = substring(stringField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) % percentile(numberField, 50) BY ipField", + "query": "from a_index | eval substring(stringField, numberField, numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats count(* + 1) BY ipField", - "error": [ - "SyntaxError: no viable alternative at input 'count(* +'" - ], + "query": "from a_index | eval var = substring(to_string(stringField), to_integer(stringField), to_integer(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats count(* + round(numberField)) BY ipField", + "query": "from a_index | eval substring(numberField, stringField, stringField)", "error": [ - "SyntaxError: no viable alternative at input 'count(* +'" + "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 | stats count(round(*)) BY ipField", + "query": "from a_index | eval substring(stringField, numberField, numberField, extraArg)", "error": [ - "Using wildcards (*) in round is not allowed" + "Error: [substring] function expects exactly 3 arguments, got 4." ], "warning": [] }, { - "query": "from a_index | stats count(count(*)) BY ipField", - "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [count(*)] of type [number]" - ], + "query": "from a_index | sort substring(stringField, numberField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats numberField + 1", - "error": [ - "At least one aggregation function required in [STATS], found [numberField+1]" - ], + "query": "row var = tan(5)", + "error": [], "warning": [] }, { - "query": "from a_index | stats 5 + avg(numberField) +1", + "query": "row tan(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats 5 +1 + avg(numberField)", + "query": "row var = tan(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats 5 +1 + numberField", + "query": "row var = tan(\"a\")", "error": [ - "At least one aggregation function required in [STATS], found [5+1+numberField]" + "Argument of [tan] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | stats 5 + numberField +1", - "error": [ - "At least one aggregation function required in [STATS], found [5+numberField+1]" - ], + "query": "from a_index | where tan(numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats 5 + numberField +1, var0 = sum(numberField)", + "query": "from a_index | where tan(stringField) > 0", "error": [ - "At least one aggregation function required in [STATS], found [5+numberField+1]" + "Argument of [tan] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats round( sum(numberField) )", + "query": "from a_index | eval var = tan(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round( sum(numberField) ) + round( sum(numberField) )", + "query": "from a_index | eval tan(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round( numberField + sum(numberField) )", - "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [round(numberField+sum(numberField))]" - ], + "query": "from a_index | eval var = tan(to_integer(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats round( numberField + sum(numberField) ), var0 = sum(numberField)", + "query": "from a_index | eval tan(stringField)", "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [round(numberField+sum(numberField))]" + "Argument of [tan] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats var0 = round( numberField + sum(numberField) ), var1 = sum(numberField)", + "query": "from a_index | eval tan(numberField, extraArg)", "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [round(numberField+sum(numberField))]" + "Error: [tan] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats round( sum(numberField + numberField) )", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round( sum(numberField + round(numberField)) )", - "error": [], - "warning": [] - }, - { - "query": "from a_index | stats round( sum(numberField + round(numberField)) ) + round( sum(numberField + round(numberField)) )", - "error": [], + "query": "from a_index | eval var = tan(*)", + "error": [ + "Using wildcards (*) in tan is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats sum(round( numberField ) )", + "query": "from a_index | sort tan(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(round( numberField ) ) + sum(round( numberField ) )", + "query": "row var = tanh(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats 5 + avg(numberField) +1+1", + "query": "row tanh(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats 5 +1+1 + avg(numberField)", + "query": "row var = tanh(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats 5 +1+1 + numberField", + "query": "row var = tanh(\"a\")", "error": [ - "At least one aggregation function required in [STATS], found [5+1+1+numberField]" + "Argument of [tanh] must be [number], found value [\"a\"] type [string]" ], "warning": [] }, { - "query": "from a_index | stats 5 + numberField +1+1", - "error": [ - "At least one aggregation function required in [STATS], found [5+numberField+1+1]" - ], + "query": "from a_index | where tanh(numberField) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats 5 + numberField +1+1, var0 = sum(numberField)", + "query": "from a_index | where tanh(stringField) > 0", "error": [ - "At least one aggregation function required in [STATS], found [5+numberField+1+1]" + "Argument of [tanh] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats round(round( sum(numberField) ))", + "query": "from a_index | eval var = tanh(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(round( sum(numberField) )) + round(round( sum(numberField) ))", + "query": "from a_index | eval tanh(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(round( numberField + sum(numberField) ))", - "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(numberField+sum(numberField)))]" - ], + "query": "from a_index | eval var = tanh(to_integer(stringField))", + "error": [], "warning": [] }, { - "query": "from a_index | stats round(round( numberField + sum(numberField) )), var0 = sum(numberField)", + "query": "from a_index | eval tanh(stringField)", "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(numberField+sum(numberField)))]" + "Argument of [tanh] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats var0 = round(round( numberField + sum(numberField) )), var1 = sum(numberField)", + "query": "from a_index | eval tanh(numberField, extraArg)", "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(numberField+sum(numberField)))]" + "Error: [tanh] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats round(round( sum(numberField + numberField) ))", - "error": [], + "query": "from a_index | eval var = tanh(*)", + "error": [ + "Using wildcards (*) in tanh is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats round(round( sum(numberField + round(numberField)) ))", + "query": "from a_index | sort tanh(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(round( sum(numberField + round(numberField)) )) + round(round( sum(numberField + round(numberField)) ))", + "query": "row var = tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(round(round( numberField )) )", + "query": "row tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(round(round( numberField )) ) + sum(round(round( numberField )) )", + "query": "from a_index | where tau() > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats 5 + avg(numberField) +1+1+1", + "query": "from a_index | eval var = tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats 5 +1+1+1 + avg(numberField)", + "query": "from a_index | eval tau()", "error": [], "warning": [] }, { - "query": "from a_index | stats 5 +1+1+1 + numberField", - "error": [ - "At least one aggregation function required in [STATS], found [5+1+1+1+numberField]" - ], - "warning": [] - }, - { - "query": "from a_index | stats 5 + numberField +1+1+1", + "query": "from a_index | eval tau(extraArg)", "error": [ - "At least one aggregation function required in [STATS], found [5+numberField+1+1+1]" + "Error: [tau] function expects exactly 0 arguments, got 1." ], "warning": [] }, { - "query": "from a_index | stats 5 + numberField +1+1+1, var0 = sum(numberField)", - "error": [ - "At least one aggregation function required in [STATS], found [5+numberField+1+1+1]" - ], + "query": "from a_index | sort tau()", + "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round( sum(numberField) )))", + "query": "row var = to_boolean(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round( sum(numberField) ))) + round(round(round( sum(numberField) )))", + "query": "row to_boolean(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round( numberField + sum(numberField) )))", - "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(round(numberField+sum(numberField))))]" - ], + "query": "row var = to_bool(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round( numberField + sum(numberField) ))), var0 = sum(numberField)", - "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(round(numberField+sum(numberField))))]" - ], + "query": "from a_index | eval var = to_boolean(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = round(round(round( numberField + sum(numberField) ))), var1 = sum(numberField)", - "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(round(numberField+sum(numberField))))]" - ], + "query": "from a_index | eval to_boolean(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round( sum(numberField + numberField) )))", + "query": "from a_index | eval var = to_bool(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round( sum(numberField + round(numberField)) )))", - "error": [], + "query": "from a_index | eval var = to_boolean(*)", + "error": [ + "Using wildcards (*) in to_boolean is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats round(round(round( sum(numberField + round(numberField)) ))) + round(round(round( sum(numberField + round(numberField)) )))", + "query": "from a_index | sort to_boolean(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(round(round(round( numberField ))) )", + "query": "row var = to_cartesianpoint(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(round(round(round( numberField ))) ) + sum(round(round(round( numberField ))) )", + "query": "row to_cartesianpoint(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats 5 + avg(numberField) +1+1+1+1", + "query": "from a_index | eval var = to_cartesianpoint(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats 5 +1+1+1+1 + avg(numberField)", + "query": "from a_index | eval to_cartesianpoint(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats 5 +1+1+1+1 + numberField", + "query": "from a_index | eval var = to_cartesianpoint(*)", "error": [ - "At least one aggregation function required in [STATS], found [5+1+1+1+1+numberField]" + "Using wildcards (*) in to_cartesianpoint is not allowed" ], "warning": [] }, { - "query": "from a_index | stats 5 + numberField +1+1+1+1", - "error": [ - "At least one aggregation function required in [STATS], found [5+numberField+1+1+1+1]" - ], + "query": "from a_index | sort to_cartesianpoint(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats 5 + numberField +1+1+1+1, var0 = sum(numberField)", - "error": [ - "At least one aggregation function required in [STATS], found [5+numberField+1+1+1+1]" - ], + "query": "row var = to_cartesianshape(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round(round( sum(numberField) ))))", + "query": "row to_cartesianshape(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round(round( sum(numberField) )))) + round(round(round(round( sum(numberField) ))))", + "query": "from a_index | eval var = to_cartesianshape(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round(round( numberField + sum(numberField) ))))", - "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(round(round(numberField+sum(numberField)))))]" - ], + "query": "from a_index | eval to_cartesianshape(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round(round( numberField + sum(numberField) )))), var0 = sum(numberField)", + "query": "from a_index | eval var = to_cartesianshape(*)", "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(round(round(numberField+sum(numberField)))))]" + "Using wildcards (*) in to_cartesianshape is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var0 = round(round(round(round( numberField + sum(numberField) )))), var1 = sum(numberField)", - "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [round(round(round(round(numberField+sum(numberField)))))]" - ], + "query": "from a_index | sort to_cartesianshape(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round(round( sum(numberField + numberField) ))))", + "query": "row var = to_datetime(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round(round( sum(numberField + round(numberField)) ))))", + "query": "row to_datetime(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(round(round(round( sum(numberField + round(numberField)) )))) + round(round(round(round( sum(numberField + round(numberField)) ))))", + "query": "row var = to_dt(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(round(round(round(round( numberField )))) )", + "query": "from a_index | eval var = to_datetime(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(round(round(round(round( numberField )))) ) + sum(round(round(round(round( numberField )))) )", + "query": "from a_index | eval to_datetime(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats 5 + numberField + 1", - "error": [ - "At least one aggregation function required in [STATS], found [5+numberField+1]" - ], + "query": "from a_index | eval var = to_dt(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats numberField + 1 by ipField", + "query": "from a_index | eval var = to_datetime(*)", "error": [ - "At least one aggregation function required in [STATS], found [numberField+1]" + "Using wildcards (*) in to_datetime is not allowed" ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 50) + 1 by ipField", + "query": "from a_index | sort to_datetime(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats count(*)", + "query": "row var = to_degrees(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats count()", + "query": "row to_degrees(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = count(*)", + "query": "row var = to_degrees(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = count()", - "error": [], + "query": "row var = to_degrees(\"a\")", + "error": [ + "Argument of [to_degrees] must be [number], found value [\"a\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField), count(*)", + "query": "from a_index | where to_degrees(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(fn(number)), count(*)", - "error": [ - "Unknown function [fn]" - ], - "warning": [] - }, - { - "query": "from a_index | STATS sum( numberField ) + abs( numberField ) ", + "query": "from a_index | where to_degrees(stringField) > 0", "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [sum(numberField)+abs(numberField)]" + "Argument of [to_degrees] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | STATS abs( numberField + sum( numberField )) ", - "error": [ - "Cannot combine aggregation and non-aggregation values in [STATS], found [abs(numberField+sum(numberField))]" - ], + "query": "from a_index | eval var = to_degrees(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = avg(numberField)", + "query": "from a_index | eval to_degrees(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField)", + "query": "from a_index | eval var = to_degrees(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(avg(numberField))", - "error": [], + "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 | stats round(avg(numberField))", - "error": [], + "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 | stats var = round(avg(numberField)) + avg(numberField)", - "error": [], + "query": "from a_index | eval var = to_degrees(*)", + "error": [ + "Using wildcards (*) in to_degrees is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats round(avg(numberField)) + avg(numberField)", + "query": "from a_index | sort to_degrees(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField / 2)", + "query": "row var = to_double(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField / 2)", + "query": "row to_double(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField / 2)", + "query": "row var = to_dbl(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField / 2)", + "query": "from a_index | eval var = to_double(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField)", + "query": "from a_index | eval to_double(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField)", + "query": "from a_index | eval var = to_dbl(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField)", - "error": [], + "query": "from a_index | eval var = to_double(*)", + "error": [ + "Using wildcards (*) in to_double is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField)", + "query": "from a_index | sort to_double(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField) by round(numberField / 2)", + "query": "row var = to_geopoint(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = avg(numberField) by var1 = round(numberField / 2)", + "query": "row to_geopoint(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), ipField", + "query": "from a_index | eval var = to_geopoint(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | eval to_geopoint(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), numberField / 2", - "error": [], + "query": "from a_index | eval var = to_geopoint(*)", + "error": [ + "Using wildcards (*) in to_geopoint is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | sort to_geopoint(stringField)", "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": "row var = to_geoshape(\"a\")", + "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": "row to_geoshape(\"a\")", + "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 = to_geoshape(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = avg(*)", - "error": [ - "Using wildcards (*) in avg is not allowed" - ], + "query": "from a_index | eval to_geoshape(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(numberField)", - "error": [], + "query": "from a_index | eval var = to_geoshape(*)", + "error": [ + "Using wildcards (*) in to_geoshape is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats sum(numberField)", + "query": "from a_index | sort to_geoshape(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(sum(numberField))", + "query": "row var = to_integer(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(sum(numberField))", + "query": "row to_integer(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(sum(numberField)) + sum(numberField)", + "query": "row var = to_int(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(sum(numberField)) + sum(numberField)", + "query": "from a_index | eval var = to_integer(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(numberField / 2)", + "query": "from a_index | eval to_integer(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField / 2)", + "query": "from a_index | eval var = to_int(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField / 2)", - "error": [], + "query": "from a_index | eval var = to_integer(*)", + "error": [ + "Using wildcards (*) in to_integer is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField / 2)", + "query": "from a_index | sort to_integer(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(numberField)", + "query": "row var = to_ip(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField)", + "query": "row to_ip(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField)", + "query": "from a_index | eval var = to_ip(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField)", + "query": "from a_index | eval to_ip(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats sum(numberField) by round(numberField / 2)", - "error": [], + "query": "from a_index | eval var = to_ip(*)", + "error": [ + "Using wildcards (*) in to_ip is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats var0 = sum(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | sort to_ip(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), ipField", + "query": "row var = to_long(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), ipField", + "query": "row to_long(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval var = to_long(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "from a_index | eval to_long(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(avg(numberField))", + "query": "from a_index | eval var = to_long(*)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Using wildcards (*) in to_long is not allowed" ], "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": "from a_index | sort to_long(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats sum(stringField)", - "error": [ - "Argument of [sum] must be [number], found value [stringField] type [string]" - ], + "query": "row var = to_lower(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = sum(*)", - "error": [ - "Using wildcards (*) in sum is not allowed" - ], + "query": "row to_lower(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = median(numberField)", + "query": "row var = to_lower(to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField)", - "error": [], + "query": "row var = to_lower(5)", + "error": [ + "Argument of [to_lower] must be [string], found value [5] type [number]" + ], "warning": [] }, { - "query": "from a_index | stats var = round(median(numberField))", + "query": "from a_index | where length(to_lower(stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median(numberField))", - "error": [], + "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 | stats var = round(median(numberField)) + median(numberField)", + "query": "from a_index | eval var = to_lower(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median(numberField)) + median(numberField)", + "query": "from a_index | eval to_lower(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField / 2)", + "query": "from a_index | eval var = to_lower(to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField / 2)", - "error": [], + "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 | stats avg(numberField), median(numberField / 2)", - "error": [], + "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 | stats avg(numberField), var0 = median(numberField / 2)", - "error": [], + "query": "from a_index | eval var = to_lower(*)", + "error": [ + "Using wildcards (*) in to_lower is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats median(numberField)", + "query": "from a_index | sort to_lower(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField)", + "query": "row var = to_radians(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField)", + "query": "row to_radians(5)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median(numberField)", + "query": "row var = to_radians(to_integer(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats median(numberField) by round(numberField / 2)", - "error": [], + "query": "row var = to_radians(\"a\")", + "error": [ + "Argument of [to_radians] must be [number], found value [\"a\"] type [string]" + ], "warning": [] }, { - "query": "from a_index | stats var0 = median(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | where to_radians(numberField) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), ipField", - "error": [], + "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 | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | eval var = to_radians(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval to_radians(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 = to_radians(to_integer(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = median(avg(numberField))", + "query": "from a_index | eval to_radians(stringField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [to_radians] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats median(avg(numberField))", + "query": "from a_index | eval to_radians(numberField, extraArg)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Error: [to_radians] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats median(stringField)", + "query": "from a_index | eval var = to_radians(*)", "error": [ - "Argument of [median] must be [number], found value [stringField] type [string]" + "Using wildcards (*) in to_radians is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = median(*)", - "error": [ - "Using wildcards (*) in median is not allowed" - ], + "query": "from a_index | sort to_radians(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(numberField)", + "query": "row var = to_string(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField)", + "query": "row to_string(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median_absolute_deviation(numberField))", + "query": "row var = to_str(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median_absolute_deviation(numberField))", + "query": "from a_index | eval var = to_string(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", + "query": "from a_index | eval to_string(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", + "query": "from a_index | eval var = to_str(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField / 2)", - "error": [], + "query": "from a_index | eval var = to_string(*)", + "error": [ + "Using wildcards (*) in to_string is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField / 2)", + "query": "from a_index | sort to_string(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField / 2)", + "query": "row var = to_unsigned_long(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField / 2)", + "query": "row to_unsigned_long(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField)", + "query": "row var = to_ul(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField)", + "query": "row var = to_ulong(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField)", + "query": "from a_index | eval var = to_unsigned_long(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField)", + "query": "from a_index | eval to_unsigned_long(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(numberField) by round(numberField / 2)", + "query": "from a_index | eval var = to_ul(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | eval var = to_ulong(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), ipField", - "error": [], + "query": "from a_index | eval var = to_unsigned_long(*)", + "error": [ + "Using wildcards (*) in to_unsigned_long is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), ipField", + "query": "from a_index | sort to_unsigned_long(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), numberField / 2", + "query": "row var = to_upper(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), numberField / 2", + "query": "row to_upper(\"a\")", "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 = to_upper(to_string(\"a\"))", + "error": [], "warning": [] }, { - "query": "from a_index | stats median_absolute_deviation(avg(numberField))", + "query": "row var = to_upper(5)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [to_upper] must be [string], found value [5] 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]" - ], + "query": "from a_index | where length(to_upper(stringField)) > 0", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = median_absolute_deviation(*)", + "query": "from a_index | where length(to_upper(numberField)) > 0", "error": [ - "Using wildcards (*) in median_absolute_deviation is not allowed" + "Argument of [to_upper] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | stats var = percentile(numberField, 5)", + "query": "from a_index | eval var = to_upper(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, 5)", + "query": "from a_index | eval to_upper(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(percentile(numberField, 5))", + "query": "from a_index | eval var = to_upper(to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(percentile(numberField, 5))", + "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": "from a_index | stats var = round(percentile(numberField, 5)) + percentile(numberField, 5)", + "query": "row var = to_version(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats round(percentile(numberField, 5)) + percentile(numberField, 5)", + "query": "row to_version(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, numberField)", - "error": [ - "Argument of [percentile] must be a constant, received [numberField]" - ], + "query": "row var = to_ver(\"a\")", + "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField / 2, 5)", + "query": "from a_index | eval var = to_version(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField / 2, 5)", + "query": "from a_index | eval to_version(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField / 2, 5)", + "query": "from a_index | eval var = to_ver(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField / 2, 5)", - "error": [], + "query": "from a_index | eval var = to_version(*)", + "error": [ + "Using wildcards (*) in to_version is not allowed" + ], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, 5)", + "query": "from a_index | sort to_version(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField, 5)", + "query": "row var = trim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5)", + "query": "row trim(\"a\")", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5)", + "query": "row var = trim(to_string(\"a\"))", "error": [], "warning": [] }, { - "query": "from a_index | stats percentile(numberField, 5) by round(numberField / 2)", - "error": [], + "query": "row var = trim(5)", + "error": [ + "Argument of [trim] must be [string], found value [5] type [number]" + ], "warning": [] }, { - "query": "from a_index | stats var0 = percentile(numberField, 5) by var1 = round(numberField / 2)", + "query": "from a_index | where length(trim(stringField)) > 0", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), ipField", - "error": [], + "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 | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), ipField", + "query": "from a_index | eval var = trim(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), numberField / 2", + "query": "from a_index | eval trim(stringField)", "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 var = trim(to_string(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = percentile(avg(numberField), 5)", + "query": "from a_index | eval trim(numberField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Argument of [trim] must be [string], found value [numberField] type [number]" ], "warning": [] }, { - "query": "from a_index | stats percentile(avg(numberField), 5)", + "query": "from a_index | eval trim(stringField, extraArg)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "Error: [trim] function expects exactly one argument, got 2." ], "warning": [] }, { - "query": "from a_index | stats percentile(stringField, 5)", + "query": "from a_index | eval var = trim(*)", "error": [ - "Argument of [percentile] must be [number], found value [stringField] type [string]" + "Using wildcards (*) in trim is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = max(numberField)", + "query": "from a_index | sort trim(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField)", + "query": "from a_index | stats var = avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(numberField))", + "query": "from a_index | stats avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(numberField))", + "query": "from a_index | stats var = round(avg(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(max(numberField)) + max(numberField)", + "query": "from a_index | stats round(avg(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(max(numberField)) + max(numberField)", + "query": "from a_index | stats var = round(avg(numberField)) + avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField / 2)", + "query": "from a_index | stats round(avg(numberField)) + avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField / 2)", + "query": "from a_index | stats avg(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField / 2)", + "query": "from a_index | stats var0 = avg(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField / 2)", + "query": "from a_index | stats avg(numberField), avg(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField)", + "query": "from a_index | stats avg(numberField), var0 = avg(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField)", + "query": "from a_index | stats var0 = avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField)", + "query": "from a_index | stats avg(numberField), avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField)", + "query": "from a_index | stats avg(numberField), var0 = avg(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats max(numberField) by round(numberField / 2)", + "query": "from a_index | stats avg(numberField) by round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = max(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | stats var0 = avg(numberField) by var1 = round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), ipField", + "query": "from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), ipField", + "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), max(numberField) by round(numberField / 2), numberField / 2", + "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 = max(numberField) by var1 = round(numberField / 2), numberField / 2", + "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 = max(avg(numberField))", + "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 max(avg(numberField))", + "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 max(stringField)", + "query": "from a_index | stats avg(stringField)", "error": [ - "Argument of [max] must be [number], found value [stringField] type [string]" + "Argument of [avg] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats var = max(*)", + "query": "from a_index | stats var = avg(*)", "error": [ - "Using wildcards (*) in max is not allowed" + "Using wildcards (*) in avg 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": [], + "query": "from a_index | sort avg(numberField)", + "error": [ + "SORT does not support function avg" + ], "warning": [] }, { - "query": "from a_index | stats round(max(dateField)) + max(dateField)", - "error": [], + "query": "from a_index | where avg(numberField)", + "error": [ + "WHERE does not support function avg" + ], "warning": [] }, { - "query": "from a_index | stats var = max(avg(numberField))", + "query": "from a_index | where avg(numberField) > 0", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "WHERE does not support function avg" ], "warning": [] }, { - "query": "from a_index | stats max(avg(numberField))", + "query": "from a_index | eval var = avg(numberField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "EVAL does not support function avg" ], "warning": [] }, { - "query": "from a_index | stats max(stringField)", + "query": "from a_index | eval var = avg(numberField) > 0", "error": [ - "Argument of [max] must be [number], found value [stringField] type [string]" + "EVAL does not support function avg" ], "warning": [] }, { - "query": "from a_index | stats var = max(*)", + "query": "from a_index | eval avg(numberField)", "error": [ - "Using wildcards (*) in max is not allowed" + "EVAL does not support function avg" ], "warning": [] }, { - "query": "from a_index | stats var = min(numberField)", - "error": [], + "query": "from a_index | eval avg(numberField) > 0", + "error": [ + "EVAL does not support function avg" + ], "warning": [] }, { - "query": "from a_index | stats min(numberField)", + "query": "from a_index | stats var = sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(numberField))", + "query": "from a_index | stats sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(numberField))", + "query": "from a_index | stats var = round(sum(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(min(numberField)) + min(numberField)", + "query": "from a_index | stats round(sum(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(min(numberField)) + min(numberField)", + "query": "from a_index | stats var = round(sum(numberField)) + sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField / 2)", + "query": "from a_index | stats round(sum(numberField)) + sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField / 2)", + "query": "from a_index | stats sum(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField / 2)", + "query": "from a_index | stats var0 = sum(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField / 2)", + "query": "from a_index | stats avg(numberField), sum(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField)", + "query": "from a_index | stats avg(numberField), var0 = sum(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField)", + "query": "from a_index | stats var0 = sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField)", + "query": "from a_index | stats avg(numberField), sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField)", + "query": "from a_index | stats avg(numberField), var0 = sum(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats min(numberField) by round(numberField / 2)", + "query": "from a_index | stats sum(numberField) by round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = min(numberField) by var1 = round(numberField / 2)", + "query": "from a_index | stats var0 = sum(numberField) by var1 = round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), ipField", + "query": "from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), ipField", + "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), min(numberField) by round(numberField / 2), numberField / 2", + "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 = min(numberField) by var1 = round(numberField / 2), numberField / 2", + "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 = min(avg(numberField))", + "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 min(avg(numberField))", + "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 min(stringField)", + "query": "from a_index | stats sum(stringField)", "error": [ - "Argument of [min] must be [number], found value [stringField] type [string]" + "Argument of [sum] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats var = min(*)", + "query": "from a_index | stats var = sum(*)", "error": [ - "Using wildcards (*) in min is not allowed" + "Using wildcards (*) in sum 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": [], + "query": "from a_index | sort sum(numberField)", + "error": [ + "SORT does not support function sum" + ], "warning": [] }, { - "query": "from a_index | stats var = round(min(dateField)) + min(dateField)", - "error": [], + "query": "from a_index | where sum(numberField)", + "error": [ + "WHERE does not support function sum" + ], "warning": [] }, { - "query": "from a_index | stats round(min(dateField)) + min(dateField)", - "error": [], + "query": "from a_index | where sum(numberField) > 0", + "error": [ + "WHERE does not support function sum" + ], "warning": [] }, { - "query": "from a_index | stats var = min(avg(numberField))", + "query": "from a_index | eval var = sum(numberField)", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "EVAL does not support function sum" ], "warning": [] }, { - "query": "from a_index | stats min(avg(numberField))", + "query": "from a_index | eval var = sum(numberField) > 0", "error": [ - "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" + "EVAL does not support function sum" ], "warning": [] }, { - "query": "from a_index | stats min(stringField)", + "query": "from a_index | eval sum(numberField)", "error": [ - "Argument of [min] must be [number], found value [stringField] type [string]" + "EVAL does not support function sum" ], "warning": [] }, { - "query": "from a_index | stats var = min(*)", + "query": "from a_index | eval sum(numberField) > 0", "error": [ - "Using wildcards (*) in min is not allowed" + "EVAL does not support function sum" ], "warning": [] }, { - "query": "from a_index | stats var = count(stringField)", + "query": "from a_index | stats var = median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats count(stringField)", + "query": "from a_index | stats median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count(stringField))", + "query": "from a_index | stats var = round(median(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count(stringField))", + "query": "from a_index | stats round(median(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count(stringField)) + count(stringField)", + "query": "from a_index | stats var = round(median(numberField)) + median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count(stringField)) + count(stringField)", + "query": "from a_index | stats round(median(numberField)) + median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = count_distinct(stringField, numberField)", + "query": "from a_index | stats median(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats count_distinct(stringField, numberField)", + "query": "from a_index | stats var0 = median(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count_distinct(stringField, numberField))", + "query": "from a_index | stats avg(numberField), median(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count_distinct(stringField, numberField))", + "query": "from a_index | stats avg(numberField), var0 = median(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)", + "query": "from a_index | stats var0 = median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)", + "query": "from a_index | stats avg(numberField), median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(cartesianPointField)", + "query": "from a_index | stats avg(numberField), var0 = median(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(cartesianPointField)", + "query": "from a_index | stats median(numberField) by round(numberField / 2)", "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]" - ], + "query": "from a_index | stats var0 = median(numberField) by var1 = round(numberField / 2)", + "error": [], "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]" - ], + "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), ipField", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(*)", - "error": [ - "Using wildcards (*) in st_centroid_agg is not allowed" - ], + "query": "from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), ipField", + "error": [], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(geoPointField)", + "query": "from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | stats st_centroid_agg(geoPointField)", + "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 = st_centroid_agg(avg(numberField))", + "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 st_centroid_agg(avg(numberField))", + "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 st_centroid_agg(stringField)", + "query": "from a_index | stats median(stringField)", "error": [ - "Argument of [st_centroid_agg] must be [cartesian_point], found value [stringField] type [string]" + "Argument of [median] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | stats var = st_centroid_agg(*)", + "query": "from a_index | stats var = median(*)", "error": [ - "Using wildcards (*) in st_centroid_agg is not allowed" + "Using wildcards (*) in median is not allowed" ], "warning": [] }, { - "query": "from a_index | stats var = values(stringField)", - "error": [], + "query": "from a_index | sort median(numberField)", + "error": [ + "SORT does not support function median" + ], "warning": [] }, { - "query": "from a_index | stats values(stringField)", - "error": [], + "query": "from a_index | where median(numberField)", + "error": [ + "WHERE does not support function median" + ], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 1 year)", - "error": [], + "query": "from a_index | where median(numberField) > 0", + "error": [ + "WHERE does not support function median" + ], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 1 year)", - "error": [], + "query": "from a_index | eval var = median(numberField)", + "error": [ + "EVAL does not support function median" + ], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 1 year)", - "error": [], + "query": "from a_index | eval var = median(numberField) > 0", + "error": [ + "EVAL does not support function median" + ], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, 5)", - "error": [], + "query": "from a_index | eval median(numberField)", + "error": [ + "EVAL does not support function median" + ], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, numberField)", + "query": "from a_index | eval median(numberField) > 0", "error": [ - "Argument of [bucket] must be a constant, received [numberField]" + "EVAL does not support function median" ], "warning": [] }, { - "query": "from a_index | stats by bin(numberField, 5)", + "query": "from a_index | stats var = median_absolute_deviation(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, \"a\", \"a\")", + "query": "from a_index | stats median_absolute_deviation(numberField)", "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\")", + "query": "from a_index | stats var = round(median_absolute_deviation(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, now(), now())", + "query": "from a_index | stats round(median_absolute_deviation(numberField))", "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": "from a_index | stats var = round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, now(), now())", + "query": "from a_index | stats round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, \"a\", now())", + "query": "from a_index | stats median_absolute_deviation(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, numberField, stringField, dateField)", - "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]" - ], + "query": "from a_index | stats var0 = median_absolute_deviation(numberField / 2)", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, \"a\", now())", + "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(dateField, 5, now(), \"a\")", + "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField / 2)", "error": [], "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 | stats var0 = median_absolute_deviation(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(dateField, 5, now(), \"a\")", + "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | stats by bucket(numberField, 5, 5, 5)", + "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField)", "error": [], "warning": [] }, { - "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]" - ], + "query": "from a_index | stats median_absolute_deviation(numberField) by round(numberField / 2)", + "error": [], "warning": [] }, { - "query": "from a_index | stats by bin(numberField, 5, 5, 5)", + "query": "from a_index | stats var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2)", "error": [], "warning": [] }, { - "query": "FROM index\n | EVAL numberField * 3.281\n | STATS avg_numberField = AVG(`numberField * 3.281`)", + "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "FROM index | STATS AVG(numberField) by round(numberField) + 1 | EVAL `round(numberField) + 1` / 2", + "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 sum(case(false, 0, 1))", + "query": "from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | stats var0 = sum( case(false, 0, 1))", + "query": "from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from index | stats by bucket(dateField, abs(numberField), \"\", \"\")", + "query": "from a_index | stats var = median_absolute_deviation(avg(numberField))", "error": [ - "Argument of [bucket] must be a constant, received [abs(numberField)]" + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from index | stats by bucket(dateField, abs(length(numberField)), \"\", \"\")", + "query": "from a_index | stats median_absolute_deviation(avg(numberField))", "error": [ - "Argument of [bucket] must be a constant, received [abs(length(numberField))]" + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]" ], "warning": [] }, { - "query": "from index | stats by bucket(dateField, pi(), \"\", \"\")", - "error": [], - "warning": [] - }, - { - "query": "from index | stats by bucket(dateField, 1 + 30 / 10, \"\", \"\")", - "error": [], - "warning": [] - }, - { - "query": "from index | stats by bucket(dateField, 1 + 30 / 10, concat(\"\", \"\"), \"\")", - "error": [], - "warning": [] - }, - { - "query": "from index | stats by bucket(dateField, numberField, stringField, stringField)", + "query": "from a_index | stats median_absolute_deviation(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]" + "Argument of [median_absolute_deviation] must be [number], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | sort ", + "query": "from a_index | stats var = median_absolute_deviation(*)", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "Using wildcards (*) in median_absolute_deviation is not allowed" ], "warning": [] }, { - "query": "from a_index | sort \"field\" ", - "error": [], + "query": "from a_index | sort median_absolute_deviation(numberField)", + "error": [ + "SORT does not support function median_absolute_deviation" + ], "warning": [] }, { - "query": "from a_index | sort wrongField ", + "query": "from a_index | where median_absolute_deviation(numberField)", "error": [ - "Unknown column [wrongField]" + "WHERE does not support function median_absolute_deviation" ], "warning": [] }, { - "query": "from a_index | sort numberField, ", + "query": "from a_index | where median_absolute_deviation(numberField) > 0", "error": [ - "SyntaxError: mismatched input '' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}" + "WHERE does not support function median_absolute_deviation" ], "warning": [] }, { - "query": "from a_index | sort numberField, stringField", - "error": [], + "query": "from a_index | eval var = median_absolute_deviation(numberField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], "warning": [] }, { - "query": "from a_index | sort \"field\" desc ", - "error": [], + "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 | sort numberField desc ", - "error": [], + "query": "from a_index | eval median_absolute_deviation(numberField)", + "error": [ + "EVAL does not support function median_absolute_deviation" + ], "warning": [] }, { - "query": "from a_index | sort numberField desc nulls ", + "query": "from a_index | eval median_absolute_deviation(numberField) > 0", "error": [ - "SyntaxError: missing {'first', 'last'} at ''" + "EVAL does not support function median_absolute_deviation" ], "warning": [] }, { - "query": "from a_index | sort numberField desc nulls first", + "query": "from a_index | stats var = percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField desc first", - "error": [ - "SyntaxError: extraneous input 'first' expecting " - ], + "query": "from a_index | stats percentile(numberField, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField desc nulls last", + "query": "from a_index | stats var = round(percentile(numberField, 5))", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField desc last", - "error": [ - "SyntaxError: extraneous input 'last' expecting " - ], + "query": "from a_index | stats round(percentile(numberField, 5))", + "error": [], "warning": [] }, { - "query": "from a_index | sort \"field\" asc ", + "query": "from a_index | stats var = round(percentile(numberField, 5)) + percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc ", + "query": "from a_index | stats round(percentile(numberField, 5)) + percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc nulls ", + "query": "from a_index | stats percentile(numberField, numberField)", "error": [ - "SyntaxError: missing {'first', 'last'} at ''" + "Argument of [percentile] must be a constant, received [numberField]" ], "warning": [] }, { - "query": "from a_index | sort numberField asc nulls first", + "query": "from a_index | stats percentile(numberField / 2, 5)", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc first", - "error": [ - "SyntaxError: extraneous input 'first' expecting " - ], + "query": "from a_index | stats var0 = percentile(numberField / 2, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc nulls last", + "query": "from a_index | stats avg(numberField), percentile(numberField / 2, 5)", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField asc last", - "error": [ - "SyntaxError: extraneous input 'last' expecting " - ], + "query": "from a_index | stats avg(numberField), var0 = percentile(numberField / 2, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField nulls first", + "query": "from a_index | stats var0 = percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField first", - "error": [ - "SyntaxError: extraneous input 'first' expecting " - ], + "query": "from a_index | stats avg(numberField), percentile(numberField, 5)", + "error": [], "warning": [] }, { - "query": "from a_index | sort numberField nulls last", + "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | sort numberField last", - "error": [ - "SyntaxError: extraneous input 'last' expecting " - ], + "query": "from a_index | stats percentile(numberField, 5) by round(numberField / 2)", + "error": [], "warning": [] }, { - "query": "row a = 1 | stats COUNT(*) | sort `COUNT(*)`", + "query": "from a_index | stats var0 = percentile(numberField, 5) by var1 = round(numberField / 2)", "error": [], "warning": [] }, { - "query": "ROW a = 1 | STATS couNt(*) | SORT `couNt(*)`", + "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | sort abs(numberField) - to_long(stringField) desc nulls first", + "query": "from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | sort avg(numberField)", - "error": [ - "SORT does not support function avg" - ], + "query": "from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), numberField / 2", + "error": [], "warning": [] }, { - "query": "from a_index | sort sum(numberField)", + "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": [ - "SORT does not support function sum" + "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 | sort median(numberField)", + "query": "from a_index | stats percentile(avg(numberField), 5)", "error": [ - "SORT does not support function median" + "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 | sort median_absolute_deviation(numberField)", + "query": "from a_index | stats percentile(stringField, 5)", "error": [ - "SORT does not support function median_absolute_deviation" + "Argument of [percentile] must be [number], found value [stringField] type [string]" ], "warning": [] }, @@ -16231,874 +15349,1017 @@ "warning": [] }, { - "query": "from a_index | sort max(numberField)", + "query": "from a_index | where percentile(numberField, 5)", "error": [ - "SORT does not support function max" + "WHERE does not support function percentile" ], "warning": [] }, { - "query": "from a_index | sort min(numberField)", + "query": "from a_index | where percentile(numberField, 5) > 0", "error": [ - "SORT does not support function min" + "WHERE does not support function percentile" ], "warning": [] }, { - "query": "from a_index | sort count(stringField)", + "query": "from a_index | eval var = percentile(numberField, 5)", "error": [ - "SORT does not support function count" + "EVAL does not support function percentile" ], "warning": [] }, { - "query": "from a_index | sort count_distinct(stringField, numberField)", + "query": "from a_index | eval var = percentile(numberField, 5) > 0", "error": [ - "SORT does not support function count_distinct" + "EVAL does not support function percentile" ], "warning": [] }, { - "query": "from a_index | sort st_centroid_agg(cartesianPointField)", + "query": "from a_index | eval percentile(numberField, 5)", "error": [ - "SORT does not support function st_centroid_agg" + "EVAL does not support function percentile" ], "warning": [] }, { - "query": "from a_index | sort values(stringField)", + "query": "from a_index | eval percentile(numberField, 5) > 0", "error": [ - "SORT does not support function values" + "EVAL does not support function percentile" ], "warning": [] }, { - "query": "from a_index | sort bucket(dateField, 1 year)", - "error": [ - "SORT does not support function bucket" - ], + "query": "from a_index | stats var = max(numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | sort abs(numberField)", + "query": "from a_index | stats max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort acos(numberField)", + "query": "from a_index | stats var = round(max(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | sort asin(numberField)", + "query": "from a_index | stats round(max(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | sort atan(numberField)", + "query": "from a_index | stats var = round(max(numberField)) + max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort atan2(numberField, numberField)", + "query": "from a_index | stats round(max(numberField)) + max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort case(booleanField, stringField)", + "query": "from a_index | stats max(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | sort ceil(numberField)", + "query": "from a_index | stats var0 = max(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | sort cidr_match(ipField, stringField)", + "query": "from a_index | stats avg(numberField), max(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | sort coalesce(stringField)", + "query": "from a_index | stats avg(numberField), var0 = max(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | sort concat(stringField, stringField)", + "query": "from a_index | stats var0 = max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort cos(numberField)", + "query": "from a_index | stats avg(numberField), max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort cosh(numberField)", + "query": "from a_index | stats avg(numberField), var0 = max(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort date_diff(\"year\", dateField, dateField)", + "query": "from a_index | stats max(numberField) by round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | sort date_extract(\"ALIGNED_DAY_OF_WEEK_IN_MONTH\", dateField)", + "query": "from a_index | stats var0 = max(numberField) by var1 = round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | sort date_format(dateField, stringField)", + "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | sort date_parse(stringField, stringField)", + "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | sort date_trunc(1 year, dateField)", + "query": "from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | sort e()", + "query": "from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | sort ends_with(stringField, stringField)", - "error": [], + "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 | sort floor(numberField)", - "error": [], + "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 | sort greatest(stringField)", - "error": [], + "query": "from a_index | stats max(stringField)", + "error": [ + "Argument of [max] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | sort least(stringField)", - "error": [], + "query": "from a_index | stats var = max(*)", + "error": [ + "Using wildcards (*) in max is not allowed" + ], "warning": [] }, { - "query": "from a_index | sort left(stringField, numberField)", + "query": "from a_index | stats var = max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | sort length(stringField)", + "query": "from a_index | stats max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | sort log(numberField, numberField)", + "query": "from a_index | stats var = round(max(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | sort log10(numberField)", + "query": "from a_index | stats round(max(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | sort ltrim(stringField)", + "query": "from a_index | stats var = round(max(dateField)) + max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_avg(numberField)", + "query": "from a_index | stats round(max(dateField)) + max(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_concat(stringField, stringField)", - "error": [], + "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 | sort mv_count(stringField)", - "error": [], + "query": "from a_index | eval var = max(dateField) > 0", + "error": [ + "EVAL does not support function max" + ], "warning": [] }, { - "query": "from a_index | sort mv_dedupe(stringField)", - "error": [], + "query": "from a_index | eval max(dateField)", + "error": [ + "EVAL does not support function max" + ], "warning": [] }, { - "query": "from a_index | sort mv_first(stringField)", - "error": [], + "query": "from a_index | eval max(dateField) > 0", + "error": [ + "EVAL does not support function max" + ], "warning": [] }, { - "query": "from a_index | sort mv_last(stringField)", + "query": "from a_index | stats var = min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_max(stringField)", + "query": "from a_index | stats min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_median(numberField)", + "query": "from a_index | stats var = round(min(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_min(stringField)", + "query": "from a_index | stats round(min(numberField))", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_slice(stringField, numberField, numberField)", + "query": "from a_index | stats var = round(min(numberField)) + min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_sort(stringField, \"asc\")", + "query": "from a_index | stats round(min(numberField)) + min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_sum(numberField)", + "query": "from a_index | stats min(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | sort mv_zip(stringField, stringField, stringField)", + "query": "from a_index | stats var0 = min(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | sort now()", + "query": "from a_index | stats avg(numberField), min(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | sort pi()", + "query": "from a_index | stats avg(numberField), var0 = min(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | sort pow(numberField, numberField)", + "query": "from a_index | stats var0 = min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort replace(stringField, stringField, stringField)", + "query": "from a_index | stats avg(numberField), min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort right(stringField, numberField)", + "query": "from a_index | stats avg(numberField), var0 = min(numberField)", "error": [], "warning": [] }, { - "query": "from a_index | sort round(numberField, numberField)", + "query": "from a_index | stats min(numberField) by round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | sort rtrim(stringField)", + "query": "from a_index | stats var0 = min(numberField) by var1 = round(numberField / 2)", "error": [], "warning": [] }, { - "query": "from a_index | sort signum(numberField)", + "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | sort sin(numberField)", + "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), ipField", "error": [], "warning": [] }, { - "query": "from a_index | sort sinh(numberField)", + "query": "from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | sort split(stringField, stringField)", + "query": "from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), numberField / 2", "error": [], "warning": [] }, { - "query": "from a_index | sort sqrt(numberField)", - "error": [], + "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 | sort st_contains(geoPointField, geoPointField)", - "error": [], + "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 | sort st_disjoint(geoPointField, geoPointField)", - "error": [], + "query": "from a_index | stats min(stringField)", + "error": [ + "Argument of [min] must be [number], found value [stringField] type [string]" + ], "warning": [] }, { - "query": "from a_index | sort st_intersects(geoPointField, geoPointField)", - "error": [], + "query": "from a_index | stats var = min(*)", + "error": [ + "Using wildcards (*) in min is not allowed" + ], "warning": [] }, { - "query": "from a_index | sort st_within(geoPointField, geoPointField)", + "query": "from a_index | stats var = min(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | sort st_x(geoPointField)", + "query": "from a_index | stats min(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | sort st_y(geoPointField)", + "query": "from a_index | stats var = round(min(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | sort starts_with(stringField, stringField)", + "query": "from a_index | stats round(min(dateField))", "error": [], "warning": [] }, { - "query": "from a_index | sort substring(stringField, numberField, numberField)", + "query": "from a_index | stats var = round(min(dateField)) + min(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | sort tan(numberField)", + "query": "from a_index | stats round(min(dateField)) + min(dateField)", "error": [], "warning": [] }, { - "query": "from a_index | sort tanh(numberField)", - "error": [], + "query": "from a_index | sort min(numberField)", + "error": [ + "SORT does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort tau()", - "error": [], + "query": "from a_index | where min(numberField)", + "error": [ + "WHERE does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort to_boolean(stringField)", - "error": [], + "query": "from a_index | where min(numberField) > 0", + "error": [ + "WHERE does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort to_cartesianpoint(stringField)", - "error": [], + "query": "from a_index | where min(dateField)", + "error": [ + "WHERE does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort to_cartesianshape(stringField)", - "error": [], + "query": "from a_index | where min(dateField) > 0", + "error": [ + "WHERE does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort to_datetime(stringField)", - "error": [], + "query": "from a_index | eval var = min(numberField)", + "error": [ + "EVAL does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort to_degrees(numberField)", - "error": [], + "query": "from a_index | eval var = min(numberField) > 0", + "error": [ + "EVAL does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort to_double(stringField)", - "error": [], + "query": "from a_index | eval min(numberField)", + "error": [ + "EVAL does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort to_geopoint(stringField)", - "error": [], + "query": "from a_index | eval min(numberField) > 0", + "error": [ + "EVAL does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort to_geoshape(stringField)", - "error": [], + "query": "from a_index | eval var = min(dateField)", + "error": [ + "EVAL does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort to_integer(stringField)", - "error": [], + "query": "from a_index | eval var = min(dateField) > 0", + "error": [ + "EVAL does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort to_ip(stringField)", - "error": [], + "query": "from a_index | eval min(dateField)", + "error": [ + "EVAL does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort to_long(stringField)", - "error": [], + "query": "from a_index | eval min(dateField) > 0", + "error": [ + "EVAL does not support function min" + ], "warning": [] }, { - "query": "from a_index | sort to_lower(stringField)", + "query": "from a_index | stats var = count(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | sort to_radians(numberField)", + "query": "from a_index | stats count(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | sort to_string(stringField)", + "query": "from a_index | stats var = round(count(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | sort to_unsigned_long(stringField)", + "query": "from a_index | stats round(count(stringField))", "error": [], "warning": [] }, { - "query": "from a_index | sort to_upper(stringField)", + "query": "from a_index | stats var = round(count(stringField)) + count(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | sort to_version(stringField)", + "query": "from a_index | stats round(count(stringField)) + count(stringField)", "error": [], "warning": [] }, { - "query": "from a_index | sort trim(stringField)", - "error": [], + "query": "from a_index | sort count(stringField)", + "error": [ + "SORT does not support function count" + ], "warning": [] }, { - "query": "from a_index | sort sin(stringField)", + "query": "from a_index | where count(stringField)", "error": [ - "Argument of [sin] must be [number], found value [stringField] type [string]" + "WHERE does not support function count" ], "warning": [] }, { - "query": "from a_index | sort numberField + stringField", + "query": "from a_index | where count(stringField) > 0", "error": [ - "Argument of [+] must be [number], found value [stringField] type [string]" + "WHERE does not support function count" ], "warning": [] }, { - "query": "from a_index | enrich", + "query": "from a_index | eval var = count(stringField)", "error": [ - "SyntaxError: missing ENRICH_POLICY_NAME at ''" + "EVAL does not support function count" ], "warning": [] }, { - "query": "from a_index | enrich _", + "query": "from a_index | eval var = count(stringField) > 0", "error": [ - "Unknown policy [_]" + "EVAL does not support function count" ], "warning": [] }, { - "query": "from a_index | enrich _:", + "query": "from a_index | eval count(stringField)", "error": [ - "SyntaxError: token recognition error at: ':'", - "Unknown policy [_]" + "EVAL does not support function count" ], "warning": [] }, { - "query": "from a_index | enrich _:policy", + "query": "from a_index | eval count(stringField) > 0", "error": [ - "Unrecognized value [_] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" + "EVAL does not support function count" ], "warning": [] }, { - "query": "from a_index | enrich :policy", - "error": [ - "SyntaxError: token recognition error at: ':'" - ], + "query": "from a_index | stats var = count_distinct(stringField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | enrich any:", - "error": [ - "SyntaxError: token recognition error at: ':'", - "Unknown policy [any]" - ], + "query": "from a_index | stats count_distinct(stringField, numberField)", + "error": [], "warning": [] }, { - "query": "from a_index | enrich _any:", - "error": [ - "SyntaxError: token recognition error at: ':'", - "Unknown policy [_any]" - ], + "query": "from a_index | stats var = round(count_distinct(stringField, numberField))", + "error": [], "warning": [] }, { - "query": "from a_index | enrich any:policy", + "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": [ - "Unrecognized value [any] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" + "SORT does not support function count_distinct" ], "warning": [] }, { - "query": "from a_index | enrich policy ", - "error": [], + "query": "from a_index | where count_distinct(stringField, numberField)", + "error": [ + "WHERE does not support function count_distinct" + ], "warning": [] }, { - "query": "from a_index | enrich `this``is fine`", + "query": "from a_index | where count_distinct(stringField, numberField) > 0", "error": [ - "SyntaxError: mismatched input '`this``is fine`' expecting ENRICH_POLICY_NAME" + "WHERE does not support function count_distinct" ], "warning": [] }, { - "query": "from a_index | enrich this is fine", + "query": "from a_index | eval var = count_distinct(stringField, numberField)", "error": [ - "SyntaxError: mismatched input 'is' expecting ", - "Unknown policy [this]" + "EVAL does not support function count_distinct" ], "warning": [] }, { - "query": "from a_index | enrich _any:policy ", - "error": [], + "query": "from a_index | eval var = count_distinct(stringField, numberField) > 0", + "error": [ + "EVAL does not support function count_distinct" + ], "warning": [] }, { - "query": "from a_index | enrich _any : policy ", + "query": "from a_index | eval count_distinct(stringField, numberField)", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_any]" + "EVAL does not support function count_distinct" ], "warning": [] }, { - "query": "from a_index | enrich _any: policy ", + "query": "from a_index | eval count_distinct(stringField, numberField) > 0", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_any]" + "EVAL does not support function count_distinct" ], "warning": [] }, { - "query": "from a_index | enrich _any:policy ", + "query": "from a_index | stats var = st_centroid_agg(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | enrich _ANY:policy ", + "query": "from a_index | stats st_centroid_agg(cartesianPointField)", "error": [], "warning": [] }, { - "query": "from a_index | enrich _coordinator:policy ", - "error": [], + "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 | enrich _coordinator : policy ", + "query": "from a_index | stats st_centroid_agg(avg(numberField))", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_coordinator]" + "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 | enrich _coordinator: policy ", + "query": "from a_index | stats st_centroid_agg(stringField)", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_coordinator]" + "Argument of [st_centroid_agg] must be [cartesian_point], found value [stringField] type [string]" ], "warning": [] }, { - "query": "from a_index | enrich _coordinator:policy ", - "error": [], + "query": "from a_index | stats var = st_centroid_agg(*)", + "error": [ + "Using wildcards (*) in st_centroid_agg is not allowed" + ], "warning": [] }, { - "query": "from a_index | enrich _COORDINATOR:policy ", + "query": "from a_index | stats var = st_centroid_agg(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | enrich _remote:policy ", + "query": "from a_index | stats st_centroid_agg(geoPointField)", "error": [], "warning": [] }, { - "query": "from a_index | enrich _remote : policy ", + "query": "from a_index | sort st_centroid_agg(cartesianPointField)", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_remote]" + "SORT does not support function st_centroid_agg" ], "warning": [] }, { - "query": "from a_index | enrich _remote: policy ", + "query": "from a_index | where st_centroid_agg(cartesianPointField)", "error": [ - "SyntaxError: token recognition error at: ':'", - "SyntaxError: extraneous input 'policy' expecting ", - "Unknown policy [_remote]" + "WHERE does not support function st_centroid_agg" ], "warning": [] }, { - "query": "from a_index | enrich _remote:policy ", - "error": [], + "query": "from a_index | where st_centroid_agg(cartesianPointField) > 0", + "error": [ + "WHERE does not support function st_centroid_agg" + ], "warning": [] }, { - "query": "from a_index | enrich _REMOTE:policy ", - "error": [], + "query": "from a_index | where st_centroid_agg(geoPointField)", + "error": [ + "WHERE does not support function st_centroid_agg" + ], "warning": [] }, { - "query": "from a_index | enrich _unknown:policy", + "query": "from a_index | where st_centroid_agg(geoPointField) > 0", "error": [ - "Unrecognized value [_unknown] for ENRICH, mode needs to be one of [_ANY, _COORDINATOR, _REMOTE]" + "WHERE does not support function st_centroid_agg" ], "warning": [] }, { - "query": "from a_index |enrich missing-policy ", + "query": "from a_index | eval var = st_centroid_agg(cartesianPointField)", "error": [ - "Unknown policy [missing-policy]" + "EVAL does not support function st_centroid_agg" ], "warning": [] }, { - "query": "from a_index |enrich policy on ", + "query": "from a_index | eval var = st_centroid_agg(cartesianPointField) > 0", "error": [ - "SyntaxError: missing ID_PATTERN at ''" + "EVAL does not support function st_centroid_agg" ], "warning": [] }, { - "query": "from a_index | enrich policy on b ", + "query": "from a_index | eval st_centroid_agg(cartesianPointField)", "error": [ - "Unknown column [b]" + "EVAL does not support function st_centroid_agg" ], "warning": [] }, { - "query": "from a_index | enrich policy on `this``is fine`", + "query": "from a_index | eval st_centroid_agg(cartesianPointField) > 0", "error": [ - "Unknown column [this`is fine]" + "EVAL does not support function st_centroid_agg" ], "warning": [] }, { - "query": "from a_index | enrich policy on this is fine", + "query": "from a_index | eval var = st_centroid_agg(geoPointField)", "error": [ - "SyntaxError: mismatched input 'is' expecting ", - "Unknown column [this]" + "EVAL does not support function st_centroid_agg" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with ", + "query": "from a_index | eval var = st_centroid_agg(geoPointField) > 0", "error": [ - "SyntaxError: mismatched input '' expecting ID_PATTERN" + "EVAL does not support function st_centroid_agg" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 ", + "query": "from a_index | eval st_centroid_agg(geoPointField)", "error": [ - "Unknown column [var0]" + "EVAL does not support function st_centroid_agg" ], "warning": [] }, { - "query": "from a_index |enrich policy on numberField with var0 = ", + "query": "from a_index | eval st_centroid_agg(geoPointField) > 0", "error": [ - "SyntaxError: missing ID_PATTERN at ''", - "Unknown column [var0]" + "EVAL does not support function st_centroid_agg" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = c ", - "error": [ - "Unknown column [var0]", - "Unknown column [c]" - ], + "query": "from a_index | stats var = values(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index |enrich policy on numberField with var0 = , ", - "error": [ - "SyntaxError: missing ID_PATTERN at ','", - "SyntaxError: mismatched input '' expecting ID_PATTERN", - "Unknown column [var0]" - ], + "query": "from a_index | stats values(stringField)", + "error": [], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField, var1 ", + "query": "from a_index | sort values(stringField)", "error": [ - "Unknown column [var1]" + "SORT does not support function values" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField ", - "error": [], + "query": "from a_index | where values(stringField)", + "error": [ + "WHERE does not support function values" + ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField, yetAnotherField ", - "error": [], + "query": "from a_index | where values(stringField) > 0", + "error": [ + "WHERE does not support function values" + ], "warning": [] }, { - "query": "from a_index |enrich policy on numberField with var0 = otherField, var1 = ", + "query": "from a_index | eval var = values(stringField)", "error": [ - "SyntaxError: missing ID_PATTERN at ''", - "Unknown column [var1]" + "EVAL does not support function values" ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField, var1 = yetAnotherField", - "error": [], + "query": "from a_index | eval var = values(stringField) > 0", + "error": [ + "EVAL does not support function values" + ], "warning": [] }, { - "query": "from a_index | enrich policy on stringField with var0 = otherField, `this``is fine` = yetAnotherField", - "error": [], + "query": "from a_index | eval values(stringField)", + "error": [ + "EVAL does not support function values" + ], "warning": [] }, { - "query": "from a_index | enrich policy with ", + "query": "from a_index | eval values(stringField) > 0", "error": [ - "SyntaxError: mismatched input '' expecting ID_PATTERN" + "EVAL does not support function values" ], "warning": [] }, { - "query": "from a_index | enrich policy with otherField", + "query": "from a_index | stats by bucket(dateField, 1 year)", "error": [], "warning": [] }, { - "query": "from a_index | enrich policy | eval otherField", + "query": "from a_index | stats by bin(dateField, 1 year)", "error": [], "warning": [] }, { - "query": "from a_index | enrich policy with var0 = otherField | eval var0", + "query": "from a_index | stats by bucket(numberField, 5)", "error": [], "warning": [] }, { - "query": "from a_index | enrich my-pol*", + "query": "from a_index | stats by bucket(numberField, numberField)", "error": [ - "Using wildcards (*) in ENRICH is not allowed [my-pol*]" + "Argument of [bucket] must be a constant, received [numberField]" ], "warning": [] }, { - "query": "from a_index | eval stringField = 5", + "query": "from a_index | stats by bin(numberField, 5)", "error": [], - "warning": [ - "Column [stringField] of type string has been overwritten as new type: number" - ] + "warning": [] }, { - "query": "from a_index | eval numberField = \"5\"", + "query": "from a_index | stats by bucket(dateField, 5, \"a\", \"a\")", "error": [], - "warning": [ - "Column [numberField] of type number has been overwritten as new type: string" - ] + "warning": [] }, { - "query": "from a_index | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | keep ```round(numberField) + 1`` + 1`", - "error": [], + "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 | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | eval ```round(numberField) + 1`` + 1` + 1 | keep ```````round(numberField) + 1```` + 1`` + 1`", + "query": "from a_index | stats by bin(dateField, 5, \"a\", \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | eval ```round(numberField) + 1`` + 1` + 1 | eval ```````round(numberField) + 1```` + 1`` + 1` + 1 | keep ```````````````round(numberField) + 1```````` + 1```` + 1`` + 1`", + "query": "from a_index | stats by bucket(dateField, 5, now(), now())", "error": [], "warning": [] }, { - "query": "from a_index | eval round(numberField) + 1 | eval `round(numberField) + 1` + 1 | eval ```round(numberField) + 1`` + 1` + 1 | eval ```````round(numberField) + 1```` + 1`` + 1` + 1 | eval ```````````````round(numberField) + 1```````` + 1```` + 1`` + 1` + 1 | keep ```````````````````````````````round(numberField) + 1```````````````` + 1```````` + 1```` + 1`` + 1`", - "error": [], + "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]" + ], "warning": [] }, { - "query": "row var = date_diff(\"month\", \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", + "query": "from a_index | stats by bin(dateField, 5, now(), now())", "error": [], "warning": [] }, { - "query": "row var = date_diff(\"mm\", \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", + "query": "from a_index | stats by bucket(dateField, 5, \"a\", now())", "error": [], "warning": [] }, { - "query": "row var = date_diff(\"bogus\", \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", + "query": "from a_index | stats by bucket(dateField, numberField, stringField, dateField)", + "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]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, 5, \"a\", now())", "error": [], - "warning": [ - "Invalid option [\"bogus\"] for date_diff. Supported options: [\"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\"]." - ] + "warning": [] }, { - "query": "from a_index | eval date_diff(stringField, \"2023-12-02T11:00:00.000Z\", \"2023-12-02T11:00:00.000Z\")", + "query": "from a_index | stats by bucket(dateField, 5, now(), \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(\"month\", dateField, \"2023-12-02T11:00:00.000Z\")", + "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]" + ], + "warning": [] + }, + { + "query": "from a_index | stats by bin(dateField, 5, now(), \"a\")", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(\"month\", \"2023-12-02T11:00:00.000Z\", dateField)", + "query": "from a_index | stats by bucket(numberField, 5, 5, 5)", "error": [], "warning": [] }, { - "query": "from a_index | eval date_diff(\"month\", stringField, dateField)", + "query": "from a_index | stats by bucket(numberField, numberField, numberField, numberField)", "error": [ - "Argument of [date_diff] must be [date], found value [stringField] type [string]" + "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 | eval date_diff(\"month\", dateField, stringField)", + "query": "from a_index | stats by bin(numberField, 5, 5, 5)", + "error": [], + "warning": [] + }, + { + "query": "from a_index | sort bucket(dateField, 1 year)", "error": [ - "Argument of [date_diff] must be [date], found value [stringField] type [string]" + "SORT does not support function bucket" ], "warning": [] } diff --git a/packages/kbn-esql-validation-autocomplete/src/validation/function_describe_block_name.ts b/packages/kbn-esql-validation-autocomplete/src/validation/function_describe_block_name.ts new file mode 100644 index 0000000000000..00bda37e26f16 --- /dev/null +++ b/packages/kbn-esql-validation-autocomplete/src/validation/function_describe_block_name.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export const FUNCTION_DESCRIBE_BLOCK_NAME = 'functions'; 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 c37ea71ef1be4..3cb8e608d8841 100644 --- a/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts +++ b/packages/kbn-esql-validation-autocomplete/src/validation/validation.test.ts @@ -18,7 +18,7 @@ import capitalize from 'lodash/capitalize'; import { camelCase } from 'lodash'; import { getAstAndSyntaxErrors } from '@kbn/esql-ast'; import { nonNullable } from '../shared/helpers'; -import { groupingFunctionDefinitions } from '../definitions/grouping'; +import { FUNCTION_DESCRIBE_BLOCK_NAME } from './function_describe_block_name'; const fieldTypes = [ 'number', @@ -219,89 +219,6 @@ function getFieldMapping( }); } -function generateIncorrectlyTypedParameters( - name: string, - signatures: FunctionDefinition['signatures'], - currentParams: FunctionDefinition['signatures'][number]['params'], - values: { stringField: string; numberField: string; booleanField: string } -) { - const literalValues = { - string: `"a"`, - number: '5', - }; - const wrongFieldMapping = currentParams.map( - ({ name: _name, 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, - 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 }; - } - ); - - 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. - // - // Approximate this by finding the signature that best matches the INCORRECT field mapping - // - // This is not future-proof... - const misMatchesBySignature = signatures.map(({ params: fnParams }) => { - const typeMatches = fnParams.map(({ type }, i) => { - if (wrongFieldMapping[i].wrong) { - const typeFromIncorrectMapping = generatedFieldTypes[wrongFieldMapping[i].name]; - return type === typeFromIncorrectMapping; - } - return type === wrongFieldMapping[i].type; - }); - return typeMatches.filter((t) => !t).length; - })!; - const signatureToUse = - signatures[misMatchesBySignature.indexOf(Math.min(...misMatchesBySignature))]!; - - const expectedErrors = signatureToUse.params - .filter(({ constantOnly }) => !constantOnly) - .map(({ type }, i) => { - const fieldName = wrongFieldMapping[i].name; - if ( - fieldName === 'numberField' && - signatures.every(({ params: fnParams }) => fnParams[i].type !== 'string') - ) { - return; - } - return `Argument of [${name}] must be [${type}], found value [${fieldName}] type [${generatedFieldTypes[fieldName]}]`; - }) - .filter(nonNullable); - - return { wrongFieldMapping, expectedErrors }; -} - describe('validation logic', () => { const testCases: Array<{ query: string; error: string[]; warning: string[] }> = []; @@ -571,109 +488,6 @@ describe('validation logic', () => { } } - function tweakSignatureForRowCommand(signature: 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)")'); - } - - for (const { name, alias, signatures, ...defRest } of evalFunctionsDefinitions) { - if (name === 'date_diff') continue; - for (const { params, ...signRest } of signatures) { - const fieldMapping = getFieldMapping(params); - const signatureStringCorrect = tweakSignatureForRowCommand( - getFunctionSignatures( - { name, ...defRest, signatures: [{ params: fieldMapping, ...signRest }] }, - { withTypes: false } - )[0].declaration - ); - - testErrorsAndWarnings(`row var = ${signatureStringCorrect}`, []); - testErrorsAndWarnings(`row ${signatureStringCorrect}`, []); - - if (alias) { - for (const otherName of alias) { - const signatureStringWithAlias = tweakSignatureForRowCommand( - getFunctionSignatures( - { - name: otherName, - ...defRest, - signatures: [{ params: fieldMapping, ...signRest }], - }, - { withTypes: false } - )[0].declaration - ); - - testErrorsAndWarnings(`row var = ${signatureStringWithAlias}`, []); - } - } - - // Skip functions that have only arguments of type "any", as it is not possible to pass "the wrong type". - // to_version functions are a bit harder to test exactly a combination of argument and predict the - // the right error message - if ( - params.every(({ type }) => type !== 'any') && - ![ - 'to_version', - 'mv_sort', - // skip the date functions because the row tests always throw in - // a string literal and expect it to be invalid for the date functions - // but it's always valid because ES will parse it as a date - 'date_diff', - 'date_extract', - 'date_format', - 'date_trunc', - ].includes(name) - ) { - // now test nested functions - const fieldMappingWithNestedFunctions = getFieldMapping(params, { - useNestedFunction: true, - useLiterals: true, - }); - const signatureString = tweakSignatureForRowCommand( - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMappingWithNestedFunctions, ...signRest }], - }, - { withTypes: false } - )[0].declaration - ); - - testErrorsAndWarnings(`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 - ); - testErrorsAndWarnings(`row var = ${wrongSignatureString}`, expectedErrors); - } - } - } for (const op of ['>', '>=', '<', '<=', '==', '!=']) { testErrorsAndWarnings(`row var = 5 ${op} 0`, []); testErrorsAndWarnings(`row var = NOT 5 ${op} 0`, []); @@ -1221,102 +1035,6 @@ describe('validation logic', () => { // this is a scenario that was failing because "or" didn't accept "null" testErrorsAndWarnings('from a_index | where stringField == "a" or null', []); - - for (const { - name, - alias, - signatures, - ...defRest - } of statsAggregationFunctionDefinitions.filter( - ({ name: fnName, signatures: statsSignatures }) => - statsSignatures.some(({ returnType, params }) => ['number'].includes(returnType)) - )) { - for (const { params, ...signRest } of signatures) { - const fieldMapping = getFieldMapping(params); - - testErrorsAndWarnings( - `from a_index | where ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMapping, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }`, - [`WHERE does not support function ${name}`] - ); - - testErrorsAndWarnings( - `from a_index | where ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMapping, ...signRest }], - }, - { withTypes: false } - )[0].declaration - } > 0`, - [`WHERE does not support function ${name}`] - ); - } - } - - // Test that all functions work in where - const numericOrStringFunctions = evalFunctionsDefinitions.filter(({ name, signatures }) => { - return signatures.some( - ({ returnType, params }) => - ['number', 'string'].includes(returnType) && - params.every(({ type }) => ['number', 'string'].includes(type)) - ); - }); - for (const { name, signatures, ...rest } of numericOrStringFunctions) { - const supportedSignatures = signatures.filter(({ returnType }) => - // TODO — not sure why the tests have this limitation... seems like any type - // that can be part of a boolean expression should be allowed in a where clause - ['number', 'string'].includes(returnType) - ); - for (const { params, returnType, ...restSign } of supportedSignatures) { - const correctMapping = getFieldMapping(params); - testErrorsAndWarnings( - `from a_index | where ${returnType !== 'number' ? 'length(' : ''}${ - // hijacking a bit this function to produce a function call - getFunctionSignatures( - { - name, - ...rest, - signatures: [{ params: correctMapping, returnType, ...restSign }], - }, - { withTypes: false } - )[0].declaration - }${returnType !== 'number' ? ')' : ''} > 0`, - [] - ); - - const { wrongFieldMapping, expectedErrors } = generateIncorrectlyTypedParameters( - name, - signatures, - params, - { stringField: 'stringField', numberField: 'numberField', booleanField: 'booleanField' } - ); - testErrorsAndWarnings( - `from a_index | where ${returnType !== 'number' ? 'length(' : ''}${ - // hijacking a bit this function to produce a function call - getFunctionSignatures( - { - name, - ...rest, - signatures: [{ params: wrongFieldMapping, returnType, ...restSign }], - }, - { withTypes: false } - )[0].declaration - }${returnType !== 'number' ? ')' : ''} > 0`, - expectedErrors - ); - } - } }); describe('eval', () => { @@ -1409,248 +1127,6 @@ describe('validation logic', () => { `SyntaxError: extraneous input '${wrongOp}' expecting {QUOTED_STRING, INTEGER_LITERAL, DECIMAL_LITERAL, 'false', '(', 'not', 'null', '?', 'true', '+', '-', OPENING_BRACKET, UNQUOTED_IDENTIFIER, QUOTED_IDENTIFIER}`, ]); } - - for (const { name, alias, signatures, ...defRest } of statsAggregationFunctionDefinitions) { - for (const { params, ...signRest } of signatures) { - const fieldMapping = getFieldMapping(params); - testErrorsAndWarnings( - `from a_index | eval var = ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMapping, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }`, - [`EVAL does not support function ${name}`] - ); - - testErrorsAndWarnings( - `from a_index | eval var = ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMapping, ...signRest }], - }, - { withTypes: false } - )[0].declaration - } > 0`, - [`EVAL does not support function ${name}`] - ); - - testErrorsAndWarnings( - `from a_index | eval ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMapping, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }`, - [`EVAL does not support function ${name}`] - ); - - testErrorsAndWarnings( - `from a_index | eval ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMapping, ...signRest }], - }, - { withTypes: false } - )[0].declaration - } > 0`, - [`EVAL does not support function ${name}`] - ); - } - } - - for (const { name, alias, signatures, ...defRest } of evalFunctionsDefinitions) { - for (const { params, ...signRest } of signatures) { - const fieldMapping = getFieldMapping(params); - testErrorsAndWarnings( - `from a_index | eval var = ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMapping, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }`, - [] - ); - testErrorsAndWarnings( - `from a_index | eval ${ - getFunctionSignatures( - { name, ...defRest, signatures: [{ params: fieldMapping, ...signRest }] }, - { withTypes: false } - )[0].declaration - }`, - [] - ); - if (params.some(({ constantOnly }) => constantOnly)) { - const fieldReplacedType = params - .filter(({ constantOnly }) => constantOnly) - .map(({ type }) => type); - // create the mapping without the literal flag - // this will make the signature wrong on purpose where in place on constants - // the arg will be a column of the same type - const fieldMappingWithoutLiterals = getFieldMapping( - params.map(({ constantOnly, ...rest }) => rest) - ); - testErrorsAndWarnings( - `from a_index | eval ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMappingWithoutLiterals, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }`, - fieldReplacedType.map( - (type) => `Argument of [${name}] must be a constant, received [${type}Field]` - ) - ); - } - - if (alias) { - for (const otherName of alias) { - const signatureStringWithAlias = getFunctionSignatures( - { - name: otherName, - ...defRest, - signatures: [{ params: fieldMapping, ...signRest }], - }, - { withTypes: false } - )[0].declaration; - - testErrorsAndWarnings(`from a_index | eval var = ${signatureStringWithAlias}`, []); - } - } - - // Skip functions that have only arguments of type "any", as it is not possible to pass "the wrong type". - // to_version functions are a bit harder to test exactly a combination of argument and predict the - // the right error message - if ( - params.every(({ type }) => type !== 'any') && - !['to_version', 'mv_sort'].includes(name) - ) { - // now test nested functions - const fieldMappingWithNestedFunctions = getFieldMapping(params, { - useNestedFunction: true, - useLiterals: true, - }); - testErrorsAndWarnings( - `from a_index | eval var = ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMappingWithNestedFunctions, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }` - ); - - const { wrongFieldMapping, expectedErrors } = generateIncorrectlyTypedParameters( - name, - signatures, - params, - { - stringField: 'stringField', - numberField: 'numberField', - booleanField: 'booleanField', - } - ); - testErrorsAndWarnings( - `from a_index | eval ${ - getFunctionSignatures( - { name, ...defRest, signatures: [{ params: wrongFieldMapping, ...signRest }] }, - { withTypes: false } - )[0].declaration - }`, - 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 '; - } - testErrorsAndWarnings( - `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 - if (fieldMapping.length === 1 && !signRest.minParams) { - const fieldMappingWithWildcard = [...fieldMapping]; - fieldMappingWithWildcard[0].name = '*'; - - testErrorsAndWarnings( - `from a_index | eval var = ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMappingWithWildcard, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }`, - [`Using wildcards (*) in ${name} is not allowed`] - ); - } - } - } testErrorsAndWarnings( 'from a_index | eval log10(-1)', [], @@ -2123,304 +1599,6 @@ describe('validation logic', () => { 'Cannot combine aggregation and non-aggregation values in [STATS], found [abs(numberField+sum(numberField))]', ]); - for (const { name, alias, signatures, ...defRest } of statsAggregationFunctionDefinitions) { - for (const { params, ...signRest } of signatures) { - const fieldMapping = getFieldMapping(params); - - const correctSignature = getFunctionSignatures( - { name, ...defRest, signatures: [{ params: fieldMapping, ...signRest }] }, - { withTypes: false } - )[0].declaration; - testErrorsAndWarnings(`from a_index | stats var = ${correctSignature}`, []); - testErrorsAndWarnings(`from a_index | stats ${correctSignature}`, []); - - if (signRest.returnType === 'number') { - testErrorsAndWarnings(`from a_index | stats var = round(${correctSignature})`, []); - testErrorsAndWarnings(`from a_index | stats round(${correctSignature})`, []); - testErrorsAndWarnings( - `from a_index | stats var = round(${correctSignature}) + ${correctSignature}`, - [] - ); - testErrorsAndWarnings( - `from a_index | stats round(${correctSignature}) + ${correctSignature}`, - [] - ); - } - - if (params.some(({ constantOnly }) => constantOnly)) { - const fieldReplacedType = params - .filter(({ constantOnly }) => constantOnly) - .map(({ type }) => type); - // create the mapping without the literal flag - // this will make the signature wrong on purpose where in place on constants - // the arg will be a column of the same type - const fieldMappingWithoutLiterals = getFieldMapping( - params.map(({ constantOnly, ...rest }) => rest) - ); - testErrorsAndWarnings( - `from a_index | stats ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMappingWithoutLiterals, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }`, - fieldReplacedType.map( - (type) => `Argument of [${name}] must be a constant, received [${type}Field]` - ) - ); - } - - if (alias) { - for (const otherName of alias) { - const signatureStringWithAlias = getFunctionSignatures( - { - name: otherName, - ...defRest, - signatures: [{ params: fieldMapping, ...signRest }], - }, - { withTypes: false } - )[0].declaration; - - testErrorsAndWarnings(`from a_index | stats var = ${signatureStringWithAlias}`, []); - } - } - - // test only numeric functions for now - if (params[0].type === 'number') { - const nestedBuiltin = 'numberField / 2'; - const fieldMappingWithNestedBuiltinFunctions = getFieldMapping(params); - fieldMappingWithNestedBuiltinFunctions[0].name = nestedBuiltin; - - const fnSignatureWithBuiltinString = getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMappingWithNestedBuiltinFunctions, ...signRest }], - }, - { withTypes: false } - )[0].declaration; - // from a_index | STATS aggFn( numberField / 2 ) - testErrorsAndWarnings(`from a_index | stats ${fnSignatureWithBuiltinString}`, []); - testErrorsAndWarnings( - `from a_index | stats var0 = ${fnSignatureWithBuiltinString}`, - [] - ); - testErrorsAndWarnings( - `from a_index | stats avg(numberField), ${fnSignatureWithBuiltinString}`, - [] - ); - testErrorsAndWarnings( - `from a_index | stats avg(numberField), var0 = ${fnSignatureWithBuiltinString}`, - [] - ); - - const nestedEvalAndBuiltin = 'round(numberField / 2)'; - const fieldMappingWithNestedEvalAndBuiltinFunctions = getFieldMapping(params); - fieldMappingWithNestedBuiltinFunctions[0].name = nestedEvalAndBuiltin; - - const fnSignatureWithEvalAndBuiltinString = getFunctionSignatures( - { - name, - ...defRest, - signatures: [ - { params: fieldMappingWithNestedEvalAndBuiltinFunctions, ...signRest }, - ], - }, - { withTypes: false } - )[0].declaration; - // from a_index | STATS aggFn( round(numberField / 2) ) - testErrorsAndWarnings( - `from a_index | stats ${fnSignatureWithEvalAndBuiltinString}`, - [] - ); - testErrorsAndWarnings( - `from a_index | stats var0 = ${fnSignatureWithEvalAndBuiltinString}`, - [] - ); - testErrorsAndWarnings( - `from a_index | stats avg(numberField), ${fnSignatureWithEvalAndBuiltinString}`, - [] - ); - testErrorsAndWarnings( - `from a_index | stats avg(numberField), var0 = ${fnSignatureWithEvalAndBuiltinString}`, - [] - ); - // from a_index | STATS aggFn(round(numberField / 2) ) BY round(numberField / 2) - testErrorsAndWarnings( - `from a_index | stats ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}`, - [] - ); - testErrorsAndWarnings( - `from a_index | stats var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}`, - [] - ); - testErrorsAndWarnings( - `from a_index | stats avg(numberField), ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}, ipField`, - [] - ); - testErrorsAndWarnings( - `from a_index | stats avg(numberField), var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}, ipField`, - [] - ); - testErrorsAndWarnings( - `from a_index | stats avg(numberField), ${fnSignatureWithEvalAndBuiltinString} by ${nestedEvalAndBuiltin}, ${nestedBuiltin}`, - [] - ); - testErrorsAndWarnings( - `from a_index | stats avg(numberField), var0 = ${fnSignatureWithEvalAndBuiltinString} by var1 = ${nestedEvalAndBuiltin}, ${nestedBuiltin}`, - [] - ); - } - - // Skip functions that have only arguments of type "any", as it is not possible to pass "the wrong type". - // to_version is a bit harder to test exactly a combination of argument and predict the - // the right error message - if ( - params.every(({ type }) => type !== 'any') && - !['to_version', 'mv_sort'].includes(name) - ) { - // now test nested functions - const fieldMappingWithNestedAggsFunctions = getFieldMapping(params, { - useNestedFunction: true, - useLiterals: false, - }); - const nestedAggsExpectedErrors = params - .filter(({ constantOnly }) => !constantOnly) - .map( - (_) => - `Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]` - ); - testErrorsAndWarnings( - `from a_index | stats var = ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMappingWithNestedAggsFunctions, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }`, - nestedAggsExpectedErrors - ); - testErrorsAndWarnings( - `from a_index | stats ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMappingWithNestedAggsFunctions, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }`, - nestedAggsExpectedErrors - ); - const { wrongFieldMapping, expectedErrors } = generateIncorrectlyTypedParameters( - name, - signatures, - params, - { - stringField: 'stringField', - numberField: 'numberField', - booleanField: 'booleanField', - } - ); - // and the message is case of wrong argument type is passed - testErrorsAndWarnings( - `from a_index | stats ${ - getFunctionSignatures( - { name, ...defRest, signatures: [{ params: wrongFieldMapping, ...signRest }] }, - { withTypes: false } - )[0].declaration - }`, - expectedErrors - ); - - // test that only count() accepts wildcard as arg - // just check that the function accepts only 1 arg as the parser cannot handle multiple args with * as start arg - if (fieldMapping.length === 1) { - const fieldMappingWithWildcard = [...fieldMapping]; - fieldMappingWithWildcard[0].name = '*'; - - testErrorsAndWarnings( - `from a_index | stats var = ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMappingWithWildcard, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }`, - name === 'count' ? [] : [`Using wildcards (*) in ${name} is not allowed`] - ); - } - } - } - } - - for (const { name, alias, signatures, ...defRest } of groupingFunctionDefinitions) { - for (const { params, ...signRest } of signatures) { - const fieldMapping = getFieldMapping(params); - - const correctSignature = getFunctionSignatures( - { name, ...defRest, signatures: [{ params: fieldMapping, ...signRest }] }, - { withTypes: false } - )[0].declaration; - testErrorsAndWarnings(`from a_index | stats by ${correctSignature}`, []); - - if (params.some(({ constantOnly }) => constantOnly)) { - const fieldReplacedType = params - .filter(({ constantOnly }) => constantOnly) - .map(({ type }) => type); - // create the mapping without the literal flag - // this will make the signature wrong on purpose where in place on constants - // the arg will be a column of the same type - const fieldMappingWithoutLiterals = getFieldMapping( - params.map(({ constantOnly, ...rest }) => rest) - ); - testErrorsAndWarnings( - `from a_index | stats by ${ - getFunctionSignatures( - { - name, - ...defRest, - signatures: [{ params: fieldMappingWithoutLiterals, ...signRest }], - }, - { withTypes: false } - )[0].declaration - }`, - fieldReplacedType - // if a param of type time_literal or chrono_literal it will always be a literal - // so no way to test the constantOnly thing - .filter((type) => !['time_literal', 'chrono_literal'].includes(type)) - .map((type) => `Argument of [${name}] must be a constant, received [${type}Field]`) - ); - } - - if (alias) { - for (const otherName of alias) { - const signatureStringWithAlias = getFunctionSignatures( - { - name: otherName, - ...defRest, - signatures: [{ params: fieldMapping, ...signRest }], - }, - { withTypes: false } - )[0].declaration; - - testErrorsAndWarnings(`from a_index | stats by ${signatureStringWithAlias}`, []); - } - } - } - } - testErrorsAndWarnings( `FROM index | EVAL numberField * 3.281 @@ -2500,40 +1678,6 @@ describe('validation logic', () => { [] ); - // SORT doesn't accept agg or grouping functions - for (const definition of [ - ...statsAggregationFunctionDefinitions, - ...groupingFunctionDefinitions, - ]) { - const { - name, - signatures: [firstSignature], - } = definition; - const fieldMapping = getFieldMapping(firstSignature.params); - const printedInvocation = getFunctionSignatures( - { ...definition, signatures: [{ ...firstSignature, params: fieldMapping }] }, - { withTypes: false } - )[0].declaration; - - testErrorsAndWarnings(`from a_index | sort ${printedInvocation}`, [ - `SORT does not support function ${name}`, - ]); - } - - // But does accept eval functions - for (const definition of evalFunctionsDefinitions) { - const { - signatures: [firstSignature], - } = definition; - const fieldMapping = getFieldMapping(firstSignature.params); - const printedInvocation = getFunctionSignatures( - { ...definition, signatures: [{ ...firstSignature, params: fieldMapping }] }, - { withTypes: false } - )[0].declaration; - - testErrorsAndWarnings(`from a_index | sort ${printedInvocation}`, []); - } - // Expression parts are also validated testErrorsAndWarnings('from a_index | sort sin(stringField)', [ 'Argument of [sin] must be [number], found value [stringField] type [string]', @@ -2847,8 +1991,7 @@ describe('validation logic', () => { }); }); - describe('functions', () => { - // This section will expand in time, especially with https://github.com/elastic/kibana/issues/182390 + describe(FUNCTION_DESCRIBE_BLOCK_NAME, () => { describe('date_diff', () => { testErrorsAndWarnings( `row var = date_diff("month", "2023-12-02T11:00:00.000Z", "2023-12-02T11:00:00.000Z")`, @@ -2890,6 +2033,4267 @@ describe('validation logic', () => { testErrorsAndWarnings(`from a_index | eval date_diff("month", dateField, stringField)`, [ 'Argument of [date_diff] must be [date], found value [stringField] type [string]', ]); + testErrorsAndWarnings( + 'from a_index | eval var = date_diff("year", dateField, dateField)', + [] + ); + testErrorsAndWarnings('from a_index | eval date_diff("year", dateField, dateField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = date_diff("year", to_datetime(stringField), to_datetime(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval date_diff(numberField, stringField, stringField)', + [ + 'Argument of [date_diff] must be [string], found value [numberField] type [number]', + 'Argument of [date_diff] must be [date], found value [stringField] type [string]', + 'Argument of [date_diff] must be [date], found value [stringField] type [string]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval date_diff("year", dateField, dateField, extraArg)', + ['Error: [date_diff] function expects exactly 3 arguments, got 4.'] + ); + + testErrorsAndWarnings('from a_index | sort date_diff("year", dateField, dateField)', []); + }); + + describe('abs', () => { + testErrorsAndWarnings('row var = abs(5)', []); + testErrorsAndWarnings('row abs(5)', []); + testErrorsAndWarnings('row var = abs(to_integer("a"))', []); + + testErrorsAndWarnings('row var = abs("a")', [ + 'Argument of [abs] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where abs(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where abs(stringField) > 0', [ + 'Argument of [abs] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = abs(numberField)', []); + testErrorsAndWarnings('from a_index | eval abs(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = abs(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval abs(stringField)', [ + 'Argument of [abs] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval abs(numberField, extraArg)', [ + 'Error: [abs] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = abs(*)', [ + 'Using wildcards (*) in abs is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort abs(numberField)', []); + }); + + describe('acos', () => { + testErrorsAndWarnings('row var = acos(5)', []); + testErrorsAndWarnings('row acos(5)', []); + testErrorsAndWarnings('row var = acos(to_integer("a"))', []); + + testErrorsAndWarnings('row var = acos("a")', [ + 'Argument of [acos] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where acos(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where acos(stringField) > 0', [ + 'Argument of [acos] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = acos(numberField)', []); + testErrorsAndWarnings('from a_index | eval acos(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = acos(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval acos(stringField)', [ + 'Argument of [acos] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval acos(numberField, extraArg)', [ + 'Error: [acos] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = acos(*)', [ + 'Using wildcards (*) in acos is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort acos(numberField)', []); + }); + + describe('asin', () => { + testErrorsAndWarnings('row var = asin(5)', []); + testErrorsAndWarnings('row asin(5)', []); + testErrorsAndWarnings('row var = asin(to_integer("a"))', []); + + testErrorsAndWarnings('row var = asin("a")', [ + 'Argument of [asin] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where asin(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where asin(stringField) > 0', [ + 'Argument of [asin] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = asin(numberField)', []); + testErrorsAndWarnings('from a_index | eval asin(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = asin(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval asin(stringField)', [ + 'Argument of [asin] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval asin(numberField, extraArg)', [ + 'Error: [asin] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = asin(*)', [ + 'Using wildcards (*) in asin is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort asin(numberField)', []); + }); + + describe('atan', () => { + testErrorsAndWarnings('row var = atan(5)', []); + testErrorsAndWarnings('row atan(5)', []); + testErrorsAndWarnings('row var = atan(to_integer("a"))', []); + + testErrorsAndWarnings('row var = atan("a")', [ + 'Argument of [atan] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where atan(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where atan(stringField) > 0', [ + 'Argument of [atan] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = atan(numberField)', []); + testErrorsAndWarnings('from a_index | eval atan(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = atan(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval atan(stringField)', [ + 'Argument of [atan] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval atan(numberField, extraArg)', [ + 'Error: [atan] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = atan(*)', [ + 'Using wildcards (*) in atan is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort atan(numberField)', []); + }); + + describe('atan2', () => { + testErrorsAndWarnings('row var = atan2(5, 5)', []); + testErrorsAndWarnings('row atan2(5, 5)', []); + testErrorsAndWarnings('row var = atan2(to_integer("a"), to_integer("a"))', []); + + testErrorsAndWarnings('row var = atan2("a", "a")', [ + 'Argument of [atan2] must be [number], found value ["a"] type [string]', + 'Argument of [atan2] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where atan2(numberField, numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where atan2(stringField, stringField) > 0', [ + 'Argument of [atan2] must be [number], found value [stringField] type [string]', + 'Argument of [atan2] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = atan2(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval atan2(numberField, numberField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = atan2(to_integer(stringField), to_integer(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval atan2(stringField, stringField)', [ + 'Argument of [atan2] must be [number], found value [stringField] type [string]', + 'Argument of [atan2] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval atan2(numberField, numberField, extraArg)', [ + 'Error: [atan2] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort atan2(numberField, numberField)', []); + }); + + describe('case', () => { + testErrorsAndWarnings('row var = case(true, "a")', []); + testErrorsAndWarnings('row case(true, "a")', []); + 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)', []); + }); + + describe('ceil', () => { + testErrorsAndWarnings('row var = ceil(5)', []); + testErrorsAndWarnings('row ceil(5)', []); + testErrorsAndWarnings('row var = ceil(to_integer("a"))', []); + + testErrorsAndWarnings('row var = ceil("a")', [ + 'Argument of [ceil] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where ceil(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where ceil(stringField) > 0', [ + 'Argument of [ceil] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = ceil(numberField)', []); + testErrorsAndWarnings('from a_index | eval ceil(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = ceil(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval ceil(stringField)', [ + 'Argument of [ceil] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval ceil(numberField, extraArg)', [ + 'Error: [ceil] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = ceil(*)', [ + 'Using wildcards (*) in ceil is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort ceil(numberField)', []); + }); + + describe('cidr_match', () => { + testErrorsAndWarnings('row var = cidr_match(to_ip("127.0.0.1"), "a")', []); + testErrorsAndWarnings('row cidr_match(to_ip("127.0.0.1"), "a")', []); + testErrorsAndWarnings('row var = cidr_match(to_ip("a"), to_string("a"))', []); + + testErrorsAndWarnings('row var = cidr_match("a", 5)', [ + 'Argument of [cidr_match] must be [ip], found value ["a"] type [string]', + 'Argument of [cidr_match] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval var = cidr_match(ipField, stringField)', []); + testErrorsAndWarnings('from a_index | eval cidr_match(ipField, stringField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = cidr_match(to_ip(stringField), to_string(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval cidr_match(stringField, numberField)', [ + 'Argument of [cidr_match] must be [ip], found value [stringField] type [string]', + 'Argument of [cidr_match] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | sort cidr_match(ipField, stringField)', []); + }); + + describe('coalesce', () => { + testErrorsAndWarnings('row var = coalesce("a")', []); + testErrorsAndWarnings('row coalesce("a")', []); + testErrorsAndWarnings('from a_index | eval var = coalesce(stringField)', []); + testErrorsAndWarnings('from a_index | eval coalesce(stringField)', []); + testErrorsAndWarnings('from a_index | sort coalesce(stringField)', []); + }); + + describe('concat', () => { + testErrorsAndWarnings('row var = concat("a", "a")', []); + testErrorsAndWarnings('row concat("a", "a")', []); + testErrorsAndWarnings('row var = concat(to_string("a"), to_string("a"))', []); + + testErrorsAndWarnings('row var = concat(5, 5)', [ + 'Argument of [concat] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(concat(stringField, stringField)) > 0', + [] + ); + + testErrorsAndWarnings('from a_index | where length(concat(numberField, numberField)) > 0', [ + 'Argument of [concat] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval var = concat(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval concat(stringField, stringField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = concat(to_string(stringField), to_string(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval concat(numberField, numberField)', [ + 'Argument of [concat] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | sort concat(stringField, stringField)', []); + }); + + describe('cos', () => { + testErrorsAndWarnings('row var = cos(5)', []); + testErrorsAndWarnings('row cos(5)', []); + testErrorsAndWarnings('row var = cos(to_integer("a"))', []); + + testErrorsAndWarnings('row var = cos("a")', [ + 'Argument of [cos] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where cos(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where cos(stringField) > 0', [ + 'Argument of [cos] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = cos(numberField)', []); + testErrorsAndWarnings('from a_index | eval cos(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = cos(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval cos(stringField)', [ + 'Argument of [cos] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval cos(numberField, extraArg)', [ + 'Error: [cos] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = cos(*)', [ + 'Using wildcards (*) in cos is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort cos(numberField)', []); + }); + + describe('cosh', () => { + testErrorsAndWarnings('row var = cosh(5)', []); + testErrorsAndWarnings('row cosh(5)', []); + testErrorsAndWarnings('row var = cosh(to_integer("a"))', []); + + testErrorsAndWarnings('row var = cosh("a")', [ + 'Argument of [cosh] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where cosh(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where cosh(stringField) > 0', [ + 'Argument of [cosh] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = cosh(numberField)', []); + testErrorsAndWarnings('from a_index | eval cosh(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = cosh(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval cosh(stringField)', [ + 'Argument of [cosh] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval cosh(numberField, extraArg)', [ + 'Error: [cosh] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = cosh(*)', [ + 'Using wildcards (*) in cosh is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort cosh(numberField)', []); + }); + + describe('date_extract', () => { + testErrorsAndWarnings('row var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", now())', []); + testErrorsAndWarnings('row date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", now())', []); + + testErrorsAndWarnings( + 'from a_index | eval var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", to_datetime(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval date_extract(stringField, stringField)', [ + '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]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField, extraArg)', + ['Error: [date_extract] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort date_extract("ALIGNED_DAY_OF_WEEK_IN_MONTH", dateField)', + [] + ); + }); + + 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( + 'from a_index | eval var = date_format(to_datetime(stringField), to_string(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]', + ]); + + testErrorsAndWarnings('from a_index | eval date_format(dateField, stringField, extraArg)', [ + 'Error: [date_format] function expects no more than 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort date_format(dateField, stringField)', []); + }); + + describe('date_parse', () => { + testErrorsAndWarnings('row var = date_parse("a", "a")', []); + testErrorsAndWarnings('row date_parse("a", "a")', []); + testErrorsAndWarnings('row var = date_parse(to_string("a"), to_string("a"))', []); + + testErrorsAndWarnings('row var = date_parse(5, 5)', [ + 'Argument of [date_parse] must be [string], found value [5] type [number]', + 'Argument of [date_parse] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval var = date_parse(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval date_parse(stringField, stringField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = date_parse(to_string(stringField), to_string(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval date_parse(numberField, numberField)', [ + 'Argument of [date_parse] must be [string], found value [numberField] type [number]', + 'Argument of [date_parse] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval date_parse(stringField, stringField, extraArg)', + ['Error: [date_parse] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort date_parse(stringField, stringField)', []); + }); + + 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( + 'from a_index | eval var = date_trunc(1 year, to_datetime(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval date_trunc(stringField, stringField)', [ + '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]', + ]); + + testErrorsAndWarnings('from a_index | eval date_trunc(1 year, dateField, extraArg)', [ + 'Error: [date_trunc] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort date_trunc(1 year, dateField)', []); + }); + + describe('e', () => { + testErrorsAndWarnings('row var = e()', []); + testErrorsAndWarnings('row e()', []); + testErrorsAndWarnings('from a_index | where e() > 0', []); + testErrorsAndWarnings('from a_index | eval var = e()', []); + testErrorsAndWarnings('from a_index | eval e()', []); + + testErrorsAndWarnings('from a_index | eval e(extraArg)', [ + 'Error: [e] function expects exactly 0 arguments, got 1.', + ]); + + testErrorsAndWarnings('from a_index | sort e()', []); + }); + + describe('ends_with', () => { + testErrorsAndWarnings('row var = ends_with("a", "a")', []); + testErrorsAndWarnings('row ends_with("a", "a")', []); + testErrorsAndWarnings('row var = ends_with(to_string("a"), to_string("a"))', []); + + testErrorsAndWarnings('row var = ends_with(5, 5)', [ + 'Argument of [ends_with] must be [string], found value [5] type [number]', + 'Argument of [ends_with] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval var = ends_with(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval ends_with(stringField, stringField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = ends_with(to_string(stringField), to_string(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval ends_with(numberField, numberField)', [ + 'Argument of [ends_with] must be [string], found value [numberField] type [number]', + 'Argument of [ends_with] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval ends_with(stringField, stringField, extraArg)', [ + 'Error: [ends_with] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort ends_with(stringField, stringField)', []); + }); + + describe('floor', () => { + testErrorsAndWarnings('row var = floor(5)', []); + testErrorsAndWarnings('row floor(5)', []); + testErrorsAndWarnings('row var = floor(to_integer("a"))', []); + + testErrorsAndWarnings('row var = floor("a")', [ + 'Argument of [floor] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where floor(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where floor(stringField) > 0', [ + 'Argument of [floor] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = floor(numberField)', []); + testErrorsAndWarnings('from a_index | eval floor(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = floor(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval floor(stringField)', [ + 'Argument of [floor] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval floor(numberField, extraArg)', [ + 'Error: [floor] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = floor(*)', [ + 'Using wildcards (*) in floor is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort floor(numberField)', []); + }); + + describe('greatest', () => { + testErrorsAndWarnings('row var = greatest("a")', []); + testErrorsAndWarnings('row greatest("a")', []); + testErrorsAndWarnings('from a_index | eval var = greatest(stringField)', []); + testErrorsAndWarnings('from a_index | eval greatest(stringField)', []); + testErrorsAndWarnings('from a_index | sort greatest(stringField)', []); + }); + + describe('least', () => { + testErrorsAndWarnings('row var = least("a")', []); + testErrorsAndWarnings('row least("a")', []); + testErrorsAndWarnings('from a_index | eval var = least(stringField)', []); + testErrorsAndWarnings('from a_index | eval least(stringField)', []); + testErrorsAndWarnings('from a_index | sort least(stringField)', []); + }); + + describe('left', () => { + testErrorsAndWarnings('row var = left("a", 5)', []); + testErrorsAndWarnings('row left("a", 5)', []); + testErrorsAndWarnings('row var = left(to_string("a"), to_integer("a"))', []); + + testErrorsAndWarnings('row var = left(5, "a")', [ + 'Argument of [left] must be [string], found value [5] type [number]', + 'Argument of [left] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(left(stringField, numberField)) > 0', + [] + ); + + testErrorsAndWarnings('from a_index | where length(left(numberField, stringField)) > 0', [ + 'Argument of [left] must be [string], found value [numberField] type [number]', + 'Argument of [left] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = left(stringField, numberField)', []); + testErrorsAndWarnings('from a_index | eval left(stringField, numberField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = left(to_string(stringField), to_integer(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval left(numberField, stringField)', [ + 'Argument of [left] must be [string], found value [numberField] type [number]', + 'Argument of [left] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval left(stringField, numberField, extraArg)', [ + 'Error: [left] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort left(stringField, numberField)', []); + }); + + describe('length', () => { + testErrorsAndWarnings('row var = length("a")', []); + testErrorsAndWarnings('row length("a")', []); + testErrorsAndWarnings('row var = length(to_string("a"))', []); + + testErrorsAndWarnings('row var = length(5)', [ + 'Argument of [length] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings('from a_index | where length(stringField) > 0', []); + + testErrorsAndWarnings('from a_index | where length(numberField) > 0', [ + 'Argument of [length] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval var = length(stringField)', []); + testErrorsAndWarnings('from a_index | eval length(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = length(to_string(stringField))', []); + + testErrorsAndWarnings('from a_index | eval length(numberField)', [ + 'Argument of [length] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval length(stringField, extraArg)', [ + 'Error: [length] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = length(*)', [ + 'Using wildcards (*) in length is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort length(stringField)', []); + }); + + describe('log', () => { + testErrorsAndWarnings('row var = log(5, 5)', []); + testErrorsAndWarnings('row log(5, 5)', []); + testErrorsAndWarnings('row var = log(to_integer("a"), to_integer("a"))', []); + + testErrorsAndWarnings('row var = log("a", "a")', [ + 'Argument of [log] must be [number], found value ["a"] type [string]', + 'Argument of [log] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where log(numberField, numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where log(stringField, stringField) > 0', [ + 'Argument of [log] must be [number], found value [stringField] type [string]', + 'Argument of [log] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = log(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval log(numberField, numberField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = log(to_integer(stringField), to_integer(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval log(stringField, stringField)', [ + 'Argument of [log] must be [number], found value [stringField] type [string]', + 'Argument of [log] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval log(numberField, numberField, extraArg)', [ + 'Error: [log] function expects no more than 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort log(numberField, numberField)', []); + }); + + describe('log10', () => { + testErrorsAndWarnings('row var = log10(5)', []); + testErrorsAndWarnings('row log10(5)', []); + testErrorsAndWarnings('row var = log10(to_integer("a"))', []); + + testErrorsAndWarnings('row var = log10("a")', [ + 'Argument of [log10] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where log10(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where log10(stringField) > 0', [ + 'Argument of [log10] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = log10(numberField)', []); + testErrorsAndWarnings('from a_index | eval log10(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = log10(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval log10(stringField)', [ + 'Argument of [log10] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval log10(numberField, extraArg)', [ + 'Error: [log10] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = log10(*)', [ + 'Using wildcards (*) in log10 is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort log10(numberField)', []); + }); + + describe('ltrim', () => { + testErrorsAndWarnings('row var = ltrim("a")', []); + testErrorsAndWarnings('row ltrim("a")', []); + testErrorsAndWarnings('row var = ltrim(to_string("a"))', []); + + testErrorsAndWarnings('row var = ltrim(5)', [ + 'Argument of [ltrim] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings('from a_index | where length(ltrim(stringField)) > 0', []); + + testErrorsAndWarnings('from a_index | where length(ltrim(numberField)) > 0', [ + 'Argument of [ltrim] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval var = ltrim(stringField)', []); + testErrorsAndWarnings('from a_index | eval ltrim(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = ltrim(to_string(stringField))', []); + + testErrorsAndWarnings('from a_index | eval ltrim(numberField)', [ + 'Argument of [ltrim] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval ltrim(stringField, extraArg)', [ + 'Error: [ltrim] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = ltrim(*)', [ + 'Using wildcards (*) in ltrim is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort ltrim(stringField)', []); + }); + + describe('mv_avg', () => { + testErrorsAndWarnings('row var = mv_avg(5)', []); + testErrorsAndWarnings('row mv_avg(5)', []); + testErrorsAndWarnings('row var = mv_avg(to_integer("a"))', []); + + testErrorsAndWarnings('row var = mv_avg("a")', [ + 'Argument of [mv_avg] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where mv_avg(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_avg(stringField) > 0', [ + 'Argument of [mv_avg] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_avg(numberField)', []); + testErrorsAndWarnings('from a_index | eval mv_avg(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_avg(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval mv_avg(stringField)', [ + 'Argument of [mv_avg] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval mv_avg(numberField, extraArg)', [ + 'Error: [mv_avg] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_avg(*)', [ + 'Using wildcards (*) in mv_avg is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort mv_avg(numberField)', []); + }); + + describe('mv_concat', () => { + testErrorsAndWarnings('row var = mv_concat("a", "a")', []); + testErrorsAndWarnings('row mv_concat("a", "a")', []); + testErrorsAndWarnings('row var = mv_concat(to_string("a"), to_string("a"))', []); + + testErrorsAndWarnings('row var = mv_concat(5, 5)', [ + 'Argument of [mv_concat] must be [string], found value [5] type [number]', + 'Argument of [mv_concat] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(mv_concat(stringField, stringField)) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where length(mv_concat(numberField, numberField)) > 0', + [ + 'Argument of [mv_concat] must be [string], found value [numberField] type [number]', + 'Argument of [mv_concat] must be [string], found value [numberField] type [number]', + ] + ); + + testErrorsAndWarnings('from a_index | eval var = mv_concat(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval mv_concat(stringField, stringField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_concat(to_string(stringField), to_string(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval mv_concat(numberField, numberField)', [ + 'Argument of [mv_concat] must be [string], found value [numberField] type [number]', + 'Argument of [mv_concat] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval mv_concat(stringField, stringField, extraArg)', [ + 'Error: [mv_concat] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort mv_concat(stringField, stringField)', []); + }); + + describe('mv_count', () => { + testErrorsAndWarnings('row var = mv_count("a")', []); + testErrorsAndWarnings('row mv_count("a")', []); + testErrorsAndWarnings('from a_index | eval var = mv_count(stringField)', []); + testErrorsAndWarnings('from a_index | eval mv_count(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = mv_count(*)', [ + 'Using wildcards (*) in mv_count is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort mv_count(stringField)', []); + }); + + 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)', []); + }); + + 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)', []); + + testErrorsAndWarnings('from a_index | eval var = mv_first(*)', [ + 'Using wildcards (*) in mv_first is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort mv_first(stringField)', []); + }); + + describe('mv_last', () => { + testErrorsAndWarnings('row var = mv_last("a")', []); + testErrorsAndWarnings('row mv_last("a")', []); + testErrorsAndWarnings('from a_index | eval var = mv_last(stringField)', []); + testErrorsAndWarnings('from a_index | eval mv_last(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = mv_last(*)', [ + 'Using wildcards (*) in mv_last is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort mv_last(stringField)', []); + }); + + describe('mv_max', () => { + testErrorsAndWarnings('row var = mv_max("a")', []); + testErrorsAndWarnings('row mv_max("a")', []); + testErrorsAndWarnings('from a_index | eval var = mv_max(stringField)', []); + testErrorsAndWarnings('from a_index | eval mv_max(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = mv_max(*)', [ + 'Using wildcards (*) in mv_max is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort mv_max(stringField)', []); + }); + + describe('mv_median', () => { + testErrorsAndWarnings('row var = mv_median(5)', []); + testErrorsAndWarnings('row mv_median(5)', []); + testErrorsAndWarnings('row var = mv_median(to_integer("a"))', []); + + testErrorsAndWarnings('row var = mv_median("a")', [ + 'Argument of [mv_median] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where mv_median(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_median(stringField) > 0', [ + 'Argument of [mv_median] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_median(numberField)', []); + testErrorsAndWarnings('from a_index | eval mv_median(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_median(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval mv_median(stringField)', [ + 'Argument of [mv_median] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval mv_median(numberField, extraArg)', [ + 'Error: [mv_median] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_median(*)', [ + 'Using wildcards (*) in mv_median is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort mv_median(numberField)', []); + }); + + describe('mv_min', () => { + testErrorsAndWarnings('row var = mv_min("a")', []); + testErrorsAndWarnings('row mv_min("a")', []); + testErrorsAndWarnings('from a_index | eval var = mv_min(stringField)', []); + testErrorsAndWarnings('from a_index | eval mv_min(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = mv_min(*)', [ + 'Using wildcards (*) in mv_min is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort mv_min(stringField)', []); + }); + + 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)', + [] + ); + }); + + describe('mv_sort', () => { + testErrorsAndWarnings('row var = mv_sort("a", "asc")', []); + testErrorsAndWarnings('row mv_sort("a", "asc")', []); + 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")', []); + }); + + describe('mv_sum', () => { + testErrorsAndWarnings('row var = mv_sum(5)', []); + testErrorsAndWarnings('row mv_sum(5)', []); + testErrorsAndWarnings('row var = mv_sum(to_integer("a"))', []); + + testErrorsAndWarnings('row var = mv_sum("a")', [ + 'Argument of [mv_sum] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where mv_sum(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where mv_sum(stringField) > 0', [ + 'Argument of [mv_sum] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_sum(numberField)', []); + testErrorsAndWarnings('from a_index | eval mv_sum(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = mv_sum(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval mv_sum(stringField)', [ + 'Argument of [mv_sum] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval mv_sum(numberField, extraArg)', [ + 'Error: [mv_sum] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = mv_sum(*)', [ + 'Using wildcards (*) in mv_sum is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort mv_sum(numberField)', []); + }); + + describe('mv_zip', () => { + testErrorsAndWarnings('row var = mv_zip("a", "a", "a")', []); + testErrorsAndWarnings('row mv_zip("a", "a", "a")', []); + + testErrorsAndWarnings( + 'row var = mv_zip(to_string("a"), to_string("a"), to_string("a"))', + [] + ); + + testErrorsAndWarnings('row var = mv_zip(5, 5, 5)', [ + '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]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(mv_zip(stringField, stringField, stringField)) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where length(mv_zip(numberField, numberField, numberField)) > 0', + [ + '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]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(stringField, stringField, stringField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(stringField, stringField, stringField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = mv_zip(to_string(stringField), to_string(stringField), to_string(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval mv_zip(numberField, numberField, numberField)', [ + '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]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval mv_zip(stringField, stringField, stringField, extraArg)', + ['Error: [mv_zip] function expects exactly 3 arguments, got 4.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort mv_zip(stringField, stringField, stringField)', + [] + ); + }); + + describe('now', () => { + testErrorsAndWarnings('row var = now()', []); + testErrorsAndWarnings('row now()', []); + testErrorsAndWarnings('from a_index | eval var = now()', []); + testErrorsAndWarnings('from a_index | eval now()', []); + + testErrorsAndWarnings('from a_index | eval now(extraArg)', [ + 'Error: [now] function expects exactly 0 arguments, got 1.', + ]); + + testErrorsAndWarnings('from a_index | sort now()', []); + }); + + describe('pi', () => { + testErrorsAndWarnings('row var = pi()', []); + testErrorsAndWarnings('row pi()', []); + testErrorsAndWarnings('from a_index | where pi() > 0', []); + testErrorsAndWarnings('from a_index | eval var = pi()', []); + testErrorsAndWarnings('from a_index | eval pi()', []); + + testErrorsAndWarnings('from a_index | eval pi(extraArg)', [ + 'Error: [pi] function expects exactly 0 arguments, got 1.', + ]); + + testErrorsAndWarnings('from a_index | sort pi()', []); + }); + + describe('pow', () => { + testErrorsAndWarnings('row var = pow(5, 5)', []); + testErrorsAndWarnings('row pow(5, 5)', []); + testErrorsAndWarnings('row var = pow(to_integer("a"), to_integer("a"))', []); + + testErrorsAndWarnings('row var = pow("a", "a")', [ + 'Argument of [pow] must be [number], found value ["a"] type [string]', + 'Argument of [pow] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where pow(numberField, numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where pow(stringField, stringField) > 0', [ + 'Argument of [pow] must be [number], found value [stringField] type [string]', + 'Argument of [pow] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = pow(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval pow(numberField, numberField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = pow(to_integer(stringField), to_integer(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval pow(stringField, stringField)', [ + 'Argument of [pow] must be [number], found value [stringField] type [string]', + 'Argument of [pow] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval pow(numberField, numberField, extraArg)', [ + 'Error: [pow] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort pow(numberField, numberField)', []); + }); + + describe('replace', () => { + testErrorsAndWarnings('row var = replace("a", "a", "a")', []); + testErrorsAndWarnings('row replace("a", "a", "a")', []); + + testErrorsAndWarnings( + 'row var = replace(to_string("a"), to_string("a"), to_string("a"))', + [] + ); + + testErrorsAndWarnings('row var = replace(5, 5, 5)', [ + '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]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(replace(stringField, stringField, stringField)) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where length(replace(numberField, numberField, numberField)) > 0', + [ + '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]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(stringField, stringField, stringField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(stringField, stringField, stringField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = replace(to_string(stringField), to_string(stringField), to_string(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(numberField, numberField, numberField)', + [ + '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]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval replace(stringField, stringField, stringField, extraArg)', + ['Error: [replace] function expects exactly 3 arguments, got 4.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort replace(stringField, stringField, stringField)', + [] + ); + }); + + describe('right', () => { + testErrorsAndWarnings('row var = right("a", 5)', []); + testErrorsAndWarnings('row right("a", 5)', []); + testErrorsAndWarnings('row var = right(to_string("a"), to_integer("a"))', []); + + testErrorsAndWarnings('row var = right(5, "a")', [ + 'Argument of [right] must be [string], found value [5] type [number]', + 'Argument of [right] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(right(stringField, numberField)) > 0', + [] + ); + + testErrorsAndWarnings('from a_index | where length(right(numberField, stringField)) > 0', [ + 'Argument of [right] must be [string], found value [numberField] type [number]', + 'Argument of [right] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = right(stringField, numberField)', []); + testErrorsAndWarnings('from a_index | eval right(stringField, numberField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = right(to_string(stringField), to_integer(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval right(numberField, stringField)', [ + 'Argument of [right] must be [string], found value [numberField] type [number]', + 'Argument of [right] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval right(stringField, numberField, extraArg)', [ + 'Error: [right] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort right(stringField, numberField)', []); + }); + + describe('round', () => { + testErrorsAndWarnings('row var = round(5, 5)', []); + testErrorsAndWarnings('row round(5, 5)', []); + testErrorsAndWarnings('row var = round(to_integer("a"), to_integer("a"))', []); + + testErrorsAndWarnings('row var = round("a", "a")', [ + 'Argument of [round] must be [number], found value ["a"] type [string]', + 'Argument of [round] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where round(numberField, numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where round(stringField, stringField) > 0', [ + 'Argument of [round] must be [number], found value [stringField] type [string]', + 'Argument of [round] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = round(numberField, numberField)', []); + testErrorsAndWarnings('from a_index | eval round(numberField, numberField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = round(to_integer(stringField), to_integer(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval round(stringField, stringField)', [ + 'Argument of [round] must be [number], found value [stringField] type [string]', + 'Argument of [round] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval round(numberField, numberField, extraArg)', [ + 'Error: [round] function expects no more than 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort round(numberField, numberField)', []); + }); + + describe('rtrim', () => { + testErrorsAndWarnings('row var = rtrim("a")', []); + testErrorsAndWarnings('row rtrim("a")', []); + testErrorsAndWarnings('row var = rtrim(to_string("a"))', []); + + testErrorsAndWarnings('row var = rtrim(5)', [ + 'Argument of [rtrim] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings('from a_index | where length(rtrim(stringField)) > 0', []); + + testErrorsAndWarnings('from a_index | where length(rtrim(numberField)) > 0', [ + 'Argument of [rtrim] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval var = rtrim(stringField)', []); + testErrorsAndWarnings('from a_index | eval rtrim(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = rtrim(to_string(stringField))', []); + + testErrorsAndWarnings('from a_index | eval rtrim(numberField)', [ + 'Argument of [rtrim] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval rtrim(stringField, extraArg)', [ + 'Error: [rtrim] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = rtrim(*)', [ + 'Using wildcards (*) in rtrim is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort rtrim(stringField)', []); + }); + + describe('signum', () => { + testErrorsAndWarnings('row var = signum(5)', []); + testErrorsAndWarnings('row signum(5)', []); + testErrorsAndWarnings('row var = signum(to_integer("a"))', []); + + testErrorsAndWarnings('row var = signum("a")', [ + 'Argument of [signum] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where signum(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where signum(stringField) > 0', [ + 'Argument of [signum] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = signum(numberField)', []); + testErrorsAndWarnings('from a_index | eval signum(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = signum(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval signum(stringField)', [ + 'Argument of [signum] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval signum(numberField, extraArg)', [ + 'Error: [signum] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = signum(*)', [ + 'Using wildcards (*) in signum is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort signum(numberField)', []); + }); + + describe('sin', () => { + testErrorsAndWarnings('row var = sin(5)', []); + testErrorsAndWarnings('row sin(5)', []); + testErrorsAndWarnings('row var = sin(to_integer("a"))', []); + + testErrorsAndWarnings('row var = sin("a")', [ + 'Argument of [sin] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where sin(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where sin(stringField) > 0', [ + 'Argument of [sin] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = sin(numberField)', []); + testErrorsAndWarnings('from a_index | eval sin(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = sin(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval sin(stringField)', [ + 'Argument of [sin] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval sin(numberField, extraArg)', [ + 'Error: [sin] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = sin(*)', [ + 'Using wildcards (*) in sin is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort sin(numberField)', []); + }); + + describe('sinh', () => { + testErrorsAndWarnings('row var = sinh(5)', []); + testErrorsAndWarnings('row sinh(5)', []); + testErrorsAndWarnings('row var = sinh(to_integer("a"))', []); + + testErrorsAndWarnings('row var = sinh("a")', [ + 'Argument of [sinh] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where sinh(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where sinh(stringField) > 0', [ + 'Argument of [sinh] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = sinh(numberField)', []); + testErrorsAndWarnings('from a_index | eval sinh(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = sinh(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval sinh(stringField)', [ + 'Argument of [sinh] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval sinh(numberField, extraArg)', [ + 'Error: [sinh] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = sinh(*)', [ + 'Using wildcards (*) in sinh is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort sinh(numberField)', []); + }); + + describe('split', () => { + testErrorsAndWarnings('row var = split("a", "a")', []); + testErrorsAndWarnings('row split("a", "a")', []); + testErrorsAndWarnings('row var = split(to_string("a"), to_string("a"))', []); + + testErrorsAndWarnings('row var = split(5, 5)', [ + 'Argument of [split] must be [string], found value [5] type [number]', + 'Argument of [split] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(split(stringField, stringField)) > 0', + [] + ); + + testErrorsAndWarnings('from a_index | where length(split(numberField, numberField)) > 0', [ + 'Argument of [split] must be [string], found value [numberField] type [number]', + 'Argument of [split] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval var = split(stringField, stringField)', []); + testErrorsAndWarnings('from a_index | eval split(stringField, stringField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = split(to_string(stringField), to_string(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval split(numberField, numberField)', [ + 'Argument of [split] must be [string], found value [numberField] type [number]', + 'Argument of [split] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval split(stringField, stringField, extraArg)', [ + 'Error: [split] function expects exactly 2 arguments, got 3.', + ]); + + testErrorsAndWarnings('from a_index | sort split(stringField, stringField)', []); + }); + + describe('sqrt', () => { + testErrorsAndWarnings('row var = sqrt(5)', []); + testErrorsAndWarnings('row sqrt(5)', []); + testErrorsAndWarnings('row var = sqrt(to_integer("a"))', []); + + testErrorsAndWarnings('row var = sqrt("a")', [ + 'Argument of [sqrt] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where sqrt(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where sqrt(stringField) > 0', [ + 'Argument of [sqrt] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = sqrt(numberField)', []); + testErrorsAndWarnings('from a_index | eval sqrt(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = sqrt(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval sqrt(stringField)', [ + 'Argument of [sqrt] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval sqrt(numberField, extraArg)', [ + 'Error: [sqrt] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = sqrt(*)', [ + 'Using wildcards (*) in sqrt is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort sqrt(numberField)', []); + }); + + describe('st_contains', () => { + testErrorsAndWarnings( + 'row var = st_contains(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_contains(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + 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]', + ]); + + testErrorsAndWarnings( + 'row var = st_contains(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_contains(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_geopoint("a"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_contains(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_geoshape("POINT (30 10)"), to_geopoint("a"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_contains(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_contains(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianpoint("a"), to_cartesianpoint("a"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_contains(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianpoint("a"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("a"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_contains(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(geoPointField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_contains(geoPointField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_geopoint(stringField), to_geopoint(stringField))', + [] + ); + + 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]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(geoPointField, geoPointField, extraArg)', + ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(geoPointField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_contains(geoPointField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(to_geopoint(stringField), geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(geoPointField, geoShapeField, extraArg)', + ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(geoShapeField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_contains(geoShapeField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(geoShapeField, to_geopoint(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(geoShapeField, geoPointField, extraArg)', + ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_contains(geoShapeField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_contains(geoShapeField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval st_contains(geoShapeField, geoShapeField, extraArg)', + ['Error: [st_contains] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + '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)', []); + }); + + describe('st_disjoint', () => { + testErrorsAndWarnings( + 'row var = st_disjoint(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_disjoint(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + 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]', + ]); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_disjoint(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_geopoint("a"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_disjoint(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_geoshape("POINT (30 10)"), to_geopoint("a"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_disjoint(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_disjoint(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianpoint("a"), to_cartesianpoint("a"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_disjoint(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianpoint("a"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("a"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_disjoint(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(geoPointField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_disjoint(geoPointField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_geopoint(stringField), to_geopoint(stringField))', + [] + ); + + 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]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(geoPointField, geoPointField, extraArg)', + ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(geoPointField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_disjoint(geoPointField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_geopoint(stringField), geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(geoPointField, geoShapeField, extraArg)', + ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(geoShapeField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_disjoint(geoShapeField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(geoShapeField, to_geopoint(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(geoShapeField, geoPointField, extraArg)', + ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(geoShapeField, geoShapeField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_disjoint(geoShapeField, geoShapeField)', []); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(geoShapeField, geoShapeField, extraArg)', + ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(to_cartesianpoint(stringField), cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianPointField, cartesianShapeField, extraArg)', + ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(cartesianShapeField, to_cartesianpoint(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianShapeField, cartesianPointField, extraArg)', + ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_disjoint(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_disjoint(cartesianShapeField, cartesianShapeField, extraArg)', + ['Error: [st_disjoint] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort st_disjoint(geoPointField, geoPointField)', []); + }); + + describe('st_intersects', () => { + testErrorsAndWarnings( + 'row var = st_intersects(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_intersects(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + 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]', + ]); + + testErrorsAndWarnings( + 'row var = st_intersects(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_intersects(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_geopoint("a"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_intersects(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_geoshape("POINT (30 10)"), to_geopoint("a"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_intersects(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_intersects(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianpoint("a"), to_cartesianpoint("a"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_intersects(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianpoint("a"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("a"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_intersects(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(geoPointField, geoPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoPointField, geoPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_geopoint(stringField), to_geopoint(stringField))', + [] + ); + + 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]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoPointField, geoPointField, extraArg)', + ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(geoPointField, geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoPointField, geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_geopoint(stringField), geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoPointField, geoShapeField, extraArg)', + ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(geoShapeField, geoPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoShapeField, geoPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(geoShapeField, to_geopoint(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoShapeField, geoPointField, extraArg)', + ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(geoShapeField, geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoShapeField, geoShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(geoShapeField, geoShapeField, extraArg)', + ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianPointField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianpoint(stringField), to_cartesianpoint(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianPointField, cartesianPointField, extraArg)', + ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianPointField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(to_cartesianpoint(stringField), cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianPointField, cartesianShapeField, extraArg)', + ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(cartesianShapeField, to_cartesianpoint(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianShapeField, cartesianPointField, extraArg)', + ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_intersects(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_intersects(cartesianShapeField, cartesianShapeField, extraArg)', + ['Error: [st_intersects] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort st_intersects(geoPointField, geoPointField)', + [] + ); + }); + + describe('st_within', () => { + testErrorsAndWarnings( + 'row var = st_within(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_within(to_geopoint("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + 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]', + ]); + + testErrorsAndWarnings( + 'row var = st_within(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_within(to_geopoint("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_geopoint("a"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_within(to_geoshape("POINT (30 10)"), to_geopoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_geoshape("POINT (30 10)"), to_geopoint("a"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_within(to_geoshape("POINT (30 10)"), to_geoshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_within(to_cartesianpoint("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianpoint("a"), to_cartesianpoint("a"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_within(to_cartesianpoint("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianpoint("a"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_within(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianshape("POINT (30 10)"), to_cartesianpoint("a"))', + [] + ); + + testErrorsAndWarnings( + 'row var = st_within(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'row st_within(to_cartesianshape("POINT (30 10)"), to_cartesianshape("POINT (30 10)"))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(geoPointField, geoPointField)', + [] + ); + testErrorsAndWarnings('from a_index | eval st_within(geoPointField, geoPointField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = st_within(to_geopoint(stringField), to_geopoint(stringField))', + [] + ); + + 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]', + ]); + + testErrorsAndWarnings( + '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(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianShapeField, cartesianPointField)', + [] + ); + + testErrorsAndWarnings( + '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(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval st_within(cartesianShapeField, cartesianShapeField)', + [] + ); + + testErrorsAndWarnings( + '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)', []); + }); + + describe('st_x', () => { + testErrorsAndWarnings('row var = st_x(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row st_x(to_geopoint("POINT (30 10)"))', []); + 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]', + ]); + + testErrorsAndWarnings('row var = st_x(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row st_x(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = st_x(to_cartesianpoint("a"))', []); + testErrorsAndWarnings('from a_index | eval var = st_x(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval st_x(geoPointField)', []); + 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]', + ]); + + testErrorsAndWarnings('from a_index | eval st_x(geoPointField, extraArg)', [ + 'Error: [st_x] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_x(*)', [ + 'Using wildcards (*) in st_x is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_x(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval st_x(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval var = st_x(to_cartesianpoint(stringField))', []); + + testErrorsAndWarnings('from a_index | eval st_x(cartesianPointField, extraArg)', [ + 'Error: [st_x] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort st_x(geoPointField)', []); + }); + + describe('st_y', () => { + testErrorsAndWarnings('row var = st_y(to_geopoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row st_y(to_geopoint("POINT (30 10)"))', []); + 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]', + ]); + + testErrorsAndWarnings('row var = st_y(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row st_y(to_cartesianpoint("POINT (30 10)"))', []); + testErrorsAndWarnings('row var = st_y(to_cartesianpoint("a"))', []); + testErrorsAndWarnings('from a_index | eval var = st_y(geoPointField)', []); + testErrorsAndWarnings('from a_index | eval st_y(geoPointField)', []); + 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]', + ]); + + testErrorsAndWarnings('from a_index | eval st_y(geoPointField, extraArg)', [ + 'Error: [st_y] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_y(*)', [ + 'Using wildcards (*) in st_y is not allowed', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_y(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval st_y(cartesianPointField)', []); + testErrorsAndWarnings('from a_index | eval var = st_y(to_cartesianpoint(stringField))', []); + + testErrorsAndWarnings('from a_index | eval st_y(cartesianPointField, extraArg)', [ + 'Error: [st_y] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | sort st_y(geoPointField)', []); + }); + + describe('starts_with', () => { + testErrorsAndWarnings('row var = starts_with("a", "a")', []); + testErrorsAndWarnings('row starts_with("a", "a")', []); + testErrorsAndWarnings('row var = starts_with(to_string("a"), to_string("a"))', []); + + testErrorsAndWarnings('row var = starts_with(5, 5)', [ + 'Argument of [starts_with] must be [string], found value [5] type [number]', + 'Argument of [starts_with] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = starts_with(stringField, stringField)', + [] + ); + testErrorsAndWarnings('from a_index | eval starts_with(stringField, stringField)', []); + + testErrorsAndWarnings( + 'from a_index | eval var = starts_with(to_string(stringField), to_string(stringField))', + [] + ); + + testErrorsAndWarnings('from a_index | eval starts_with(numberField, numberField)', [ + 'Argument of [starts_with] must be [string], found value [numberField] type [number]', + 'Argument of [starts_with] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings( + 'from a_index | eval starts_with(stringField, stringField, extraArg)', + ['Error: [starts_with] function expects exactly 2 arguments, got 3.'] + ); + + testErrorsAndWarnings('from a_index | sort starts_with(stringField, stringField)', []); + }); + + describe('substring', () => { + testErrorsAndWarnings('row var = substring("a", 5, 5)', []); + testErrorsAndWarnings('row substring("a", 5, 5)', []); + + testErrorsAndWarnings( + 'row var = substring(to_string("a"), to_integer("a"), to_integer("a"))', + [] + ); + + testErrorsAndWarnings('row var = substring(5, "a", "a")', [ + '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]', + ]); + + testErrorsAndWarnings( + 'from a_index | where length(substring(stringField, numberField, numberField)) > 0', + [] + ); + + testErrorsAndWarnings( + 'from a_index | where length(substring(numberField, stringField, stringField)) > 0', + [ + '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]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = substring(stringField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval substring(stringField, numberField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = substring(to_string(stringField), to_integer(stringField), to_integer(stringField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | eval substring(numberField, stringField, stringField)', + [ + '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]', + ] + ); + + testErrorsAndWarnings( + 'from a_index | eval substring(stringField, numberField, numberField, extraArg)', + ['Error: [substring] function expects exactly 3 arguments, got 4.'] + ); + + testErrorsAndWarnings( + 'from a_index | sort substring(stringField, numberField, numberField)', + [] + ); + }); + + describe('tan', () => { + testErrorsAndWarnings('row var = tan(5)', []); + testErrorsAndWarnings('row tan(5)', []); + testErrorsAndWarnings('row var = tan(to_integer("a"))', []); + + testErrorsAndWarnings('row var = tan("a")', [ + 'Argument of [tan] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where tan(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where tan(stringField) > 0', [ + 'Argument of [tan] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = tan(numberField)', []); + testErrorsAndWarnings('from a_index | eval tan(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = tan(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval tan(stringField)', [ + 'Argument of [tan] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval tan(numberField, extraArg)', [ + 'Error: [tan] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = tan(*)', [ + 'Using wildcards (*) in tan is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort tan(numberField)', []); + }); + + describe('tanh', () => { + testErrorsAndWarnings('row var = tanh(5)', []); + testErrorsAndWarnings('row tanh(5)', []); + testErrorsAndWarnings('row var = tanh(to_integer("a"))', []); + + testErrorsAndWarnings('row var = tanh("a")', [ + 'Argument of [tanh] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where tanh(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where tanh(stringField) > 0', [ + 'Argument of [tanh] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = tanh(numberField)', []); + testErrorsAndWarnings('from a_index | eval tanh(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = tanh(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval tanh(stringField)', [ + 'Argument of [tanh] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval tanh(numberField, extraArg)', [ + 'Error: [tanh] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = tanh(*)', [ + 'Using wildcards (*) in tanh is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort tanh(numberField)', []); + }); + + describe('tau', () => { + testErrorsAndWarnings('row var = tau()', []); + testErrorsAndWarnings('row tau()', []); + testErrorsAndWarnings('from a_index | where tau() > 0', []); + testErrorsAndWarnings('from a_index | eval var = tau()', []); + testErrorsAndWarnings('from a_index | eval tau()', []); + + testErrorsAndWarnings('from a_index | eval tau(extraArg)', [ + 'Error: [tau] function expects exactly 0 arguments, got 1.', + ]); + + testErrorsAndWarnings('from a_index | sort tau()', []); + }); + + describe('to_boolean', () => { + testErrorsAndWarnings('row var = to_boolean("a")', []); + testErrorsAndWarnings('row to_boolean("a")', []); + testErrorsAndWarnings('row var = to_bool("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_boolean(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_boolean(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = to_bool(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_boolean(*)', [ + 'Using wildcards (*) in to_boolean is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_boolean(stringField)', []); + }); + + describe('to_cartesianpoint', () => { + testErrorsAndWarnings('row var = to_cartesianpoint("a")', []); + testErrorsAndWarnings('row to_cartesianpoint("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_cartesianpoint(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianpoint(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_cartesianpoint(*)', [ + 'Using wildcards (*) in to_cartesianpoint is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_cartesianpoint(stringField)', []); + }); + + describe('to_cartesianshape', () => { + testErrorsAndWarnings('row var = to_cartesianshape("a")', []); + testErrorsAndWarnings('row to_cartesianshape("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_cartesianshape(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_cartesianshape(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_cartesianshape(*)', [ + 'Using wildcards (*) in to_cartesianshape is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_cartesianshape(stringField)', []); + }); + + describe('to_datetime', () => { + testErrorsAndWarnings('row var = to_datetime("a")', []); + testErrorsAndWarnings('row to_datetime("a")', []); + testErrorsAndWarnings('row var = to_dt("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_datetime(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_datetime(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dt(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_datetime(*)', [ + 'Using wildcards (*) in to_datetime is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_datetime(stringField)', []); + }); + + describe('to_degrees', () => { + testErrorsAndWarnings('row var = to_degrees(5)', []); + testErrorsAndWarnings('row to_degrees(5)', []); + testErrorsAndWarnings('row var = to_degrees(to_integer("a"))', []); + + testErrorsAndWarnings('row var = to_degrees("a")', [ + 'Argument of [to_degrees] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where to_degrees(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where to_degrees(stringField) > 0', [ + 'Argument of [to_degrees] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_degrees(numberField)', []); + testErrorsAndWarnings('from a_index | eval to_degrees(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_degrees(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval to_degrees(stringField)', [ + 'Argument of [to_degrees] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval to_degrees(numberField, extraArg)', [ + 'Error: [to_degrees] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_degrees(*)', [ + 'Using wildcards (*) in to_degrees is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_degrees(numberField)', []); + }); + + describe('to_double', () => { + testErrorsAndWarnings('row var = to_double("a")', []); + testErrorsAndWarnings('row to_double("a")', []); + testErrorsAndWarnings('row var = to_dbl("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_double(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_double(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = to_dbl(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_double(*)', [ + 'Using wildcards (*) in to_double is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_double(stringField)', []); + }); + + describe('to_geopoint', () => { + testErrorsAndWarnings('row var = to_geopoint("a")', []); + testErrorsAndWarnings('row to_geopoint("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_geopoint(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_geopoint(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_geopoint(*)', [ + 'Using wildcards (*) in to_geopoint is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_geopoint(stringField)', []); + }); + + describe('to_geoshape', () => { + testErrorsAndWarnings('row var = to_geoshape("a")', []); + testErrorsAndWarnings('row to_geoshape("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_geoshape(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_geoshape(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_geoshape(*)', [ + 'Using wildcards (*) in to_geoshape is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_geoshape(stringField)', []); + }); + + describe('to_integer', () => { + testErrorsAndWarnings('row var = to_integer("a")', []); + testErrorsAndWarnings('row to_integer("a")', []); + testErrorsAndWarnings('row var = to_int("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_integer(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_integer(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = to_int(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_integer(*)', [ + 'Using wildcards (*) in to_integer is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_integer(stringField)', []); + }); + + describe('to_ip', () => { + testErrorsAndWarnings('row var = to_ip("a")', []); + testErrorsAndWarnings('row to_ip("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_ip(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_ip(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_ip(*)', [ + 'Using wildcards (*) in to_ip is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_ip(stringField)', []); + }); + + describe('to_long', () => { + testErrorsAndWarnings('row var = to_long("a")', []); + testErrorsAndWarnings('row to_long("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_long(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_long(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_long(*)', [ + 'Using wildcards (*) in to_long is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_long(stringField)', []); + }); + + describe('to_lower', () => { + testErrorsAndWarnings('row var = to_lower("a")', []); + testErrorsAndWarnings('row to_lower("a")', []); + testErrorsAndWarnings('row var = to_lower(to_string("a"))', []); + + testErrorsAndWarnings('row var = to_lower(5)', [ + 'Argument of [to_lower] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings('from a_index | where length(to_lower(stringField)) > 0', []); + + testErrorsAndWarnings('from a_index | where length(to_lower(numberField)) > 0', [ + 'Argument of [to_lower] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_lower(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_lower(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = to_lower(to_string(stringField))', []); + + testErrorsAndWarnings('from a_index | eval to_lower(numberField)', [ + 'Argument of [to_lower] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval to_lower(stringField, extraArg)', [ + 'Error: [to_lower] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_lower(*)', [ + 'Using wildcards (*) in to_lower is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_lower(stringField)', []); + }); + + describe('to_radians', () => { + testErrorsAndWarnings('row var = to_radians(5)', []); + testErrorsAndWarnings('row to_radians(5)', []); + testErrorsAndWarnings('row var = to_radians(to_integer("a"))', []); + + testErrorsAndWarnings('row var = to_radians("a")', [ + 'Argument of [to_radians] must be [number], found value ["a"] type [string]', + ]); + + testErrorsAndWarnings('from a_index | where to_radians(numberField) > 0', []); + + testErrorsAndWarnings('from a_index | where to_radians(stringField) > 0', [ + 'Argument of [to_radians] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_radians(numberField)', []); + testErrorsAndWarnings('from a_index | eval to_radians(numberField)', []); + testErrorsAndWarnings('from a_index | eval var = to_radians(to_integer(stringField))', []); + + testErrorsAndWarnings('from a_index | eval to_radians(stringField)', [ + 'Argument of [to_radians] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | eval to_radians(numberField, extraArg)', [ + 'Error: [to_radians] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_radians(*)', [ + 'Using wildcards (*) in to_radians is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_radians(numberField)', []); + }); + + describe('to_string', () => { + testErrorsAndWarnings('row var = to_string("a")', []); + testErrorsAndWarnings('row to_string("a")', []); + testErrorsAndWarnings('row var = to_str("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_string(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_string(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = to_str(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_string(*)', [ + 'Using wildcards (*) in to_string is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_string(stringField)', []); + }); + + describe('to_unsigned_long', () => { + testErrorsAndWarnings('row var = to_unsigned_long("a")', []); + testErrorsAndWarnings('row to_unsigned_long("a")', []); + testErrorsAndWarnings('row var = to_ul("a")', []); + testErrorsAndWarnings('row var = to_ulong("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_unsigned_long(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ul(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ulong(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_unsigned_long(*)', [ + 'Using wildcards (*) in to_unsigned_long is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_unsigned_long(stringField)', []); + }); + + describe('to_upper', () => { + testErrorsAndWarnings('row var = to_upper("a")', []); + testErrorsAndWarnings('row to_upper("a")', []); + testErrorsAndWarnings('row var = to_upper(to_string("a"))', []); + + testErrorsAndWarnings('row var = to_upper(5)', [ + 'Argument of [to_upper] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings('from a_index | where length(to_upper(stringField)) > 0', []); + + testErrorsAndWarnings('from a_index | where length(to_upper(numberField)) > 0', [ + 'Argument of [to_upper] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_upper(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_upper(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = to_upper(to_string(stringField))', []); + + testErrorsAndWarnings('from a_index | eval to_upper(numberField)', [ + 'Argument of [to_upper] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval to_upper(stringField, extraArg)', [ + 'Error: [to_upper] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = to_upper(*)', [ + 'Using wildcards (*) in to_upper is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_upper(stringField)', []); + }); + + describe('to_version', () => { + testErrorsAndWarnings('row var = to_version("a")', []); + testErrorsAndWarnings('row to_version("a")', []); + testErrorsAndWarnings('row var = to_ver("a")', []); + testErrorsAndWarnings('from a_index | eval var = to_version(stringField)', []); + testErrorsAndWarnings('from a_index | eval to_version(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = to_ver(stringField)', []); + + testErrorsAndWarnings('from a_index | eval var = to_version(*)', [ + 'Using wildcards (*) in to_version is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort to_version(stringField)', []); + }); + + describe('trim', () => { + testErrorsAndWarnings('row var = trim("a")', []); + testErrorsAndWarnings('row trim("a")', []); + testErrorsAndWarnings('row var = trim(to_string("a"))', []); + + testErrorsAndWarnings('row var = trim(5)', [ + 'Argument of [trim] must be [string], found value [5] type [number]', + ]); + + testErrorsAndWarnings('from a_index | where length(trim(stringField)) > 0', []); + + testErrorsAndWarnings('from a_index | where length(trim(numberField)) > 0', [ + 'Argument of [trim] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval var = trim(stringField)', []); + testErrorsAndWarnings('from a_index | eval trim(stringField)', []); + testErrorsAndWarnings('from a_index | eval var = trim(to_string(stringField))', []); + + testErrorsAndWarnings('from a_index | eval trim(numberField)', [ + 'Argument of [trim] must be [string], found value [numberField] type [number]', + ]); + + testErrorsAndWarnings('from a_index | eval trim(stringField, extraArg)', [ + 'Error: [trim] function expects exactly one argument, got 2.', + ]); + + testErrorsAndWarnings('from a_index | eval var = trim(*)', [ + 'Using wildcards (*) in trim is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort trim(stringField)', []); + }); + + describe('avg', () => { + testErrorsAndWarnings('from a_index | stats var = avg(numberField)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField)', []); + testErrorsAndWarnings('from a_index | stats var = round(avg(numberField))', []); + testErrorsAndWarnings('from a_index | stats round(avg(numberField))', []); + + testErrorsAndWarnings( + 'from a_index | stats var = round(avg(numberField)) + avg(numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats round(avg(numberField)) + avg(numberField)', + [] + ); + testErrorsAndWarnings('from a_index | stats avg(numberField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = avg(numberField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), avg(numberField / 2)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = avg(numberField / 2)', + [] + ); + testErrorsAndWarnings('from a_index | stats var0 = avg(numberField)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), avg(numberField)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), var0 = avg(numberField)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(numberField) by round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var0 = avg(numberField) by var1 = round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), avg(numberField) by round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = avg(numberField) by var1 = round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings('from a_index | stats var = avg(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats avg(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats avg(stringField)', [ + 'Argument of [avg] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | stats var = avg(*)', [ + 'Using wildcards (*) in avg is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort avg(numberField)', [ + 'SORT does not support function avg', + ]); + + testErrorsAndWarnings('from a_index | where avg(numberField)', [ + 'WHERE does not support function avg', + ]); + + testErrorsAndWarnings('from a_index | where avg(numberField) > 0', [ + 'WHERE does not support function avg', + ]); + + testErrorsAndWarnings('from a_index | eval var = avg(numberField)', [ + 'EVAL does not support function avg', + ]); + + testErrorsAndWarnings('from a_index | eval var = avg(numberField) > 0', [ + 'EVAL does not support function avg', + ]); + + testErrorsAndWarnings('from a_index | eval avg(numberField)', [ + 'EVAL does not support function avg', + ]); + + testErrorsAndWarnings('from a_index | eval avg(numberField) > 0', [ + 'EVAL does not support function avg', + ]); + }); + + describe('sum', () => { + testErrorsAndWarnings('from a_index | stats var = sum(numberField)', []); + testErrorsAndWarnings('from a_index | stats sum(numberField)', []); + testErrorsAndWarnings('from a_index | stats var = round(sum(numberField))', []); + testErrorsAndWarnings('from a_index | stats round(sum(numberField))', []); + + testErrorsAndWarnings( + 'from a_index | stats var = round(sum(numberField)) + sum(numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats round(sum(numberField)) + sum(numberField)', + [] + ); + testErrorsAndWarnings('from a_index | stats sum(numberField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = sum(numberField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), sum(numberField / 2)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = sum(numberField / 2)', + [] + ); + testErrorsAndWarnings('from a_index | stats var0 = sum(numberField)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), sum(numberField)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), var0 = sum(numberField)', []); + testErrorsAndWarnings( + 'from a_index | stats sum(numberField) by round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var0 = sum(numberField) by var1 = round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), sum(numberField) by round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = sum(numberField) by var1 = round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings('from a_index | stats var = sum(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats sum(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats sum(stringField)', [ + 'Argument of [sum] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | stats var = sum(*)', [ + 'Using wildcards (*) in sum is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort sum(numberField)', [ + 'SORT does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(numberField)', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | where sum(numberField) > 0', [ + 'WHERE does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(numberField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval var = sum(numberField) > 0', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(numberField)', [ + 'EVAL does not support function sum', + ]); + + testErrorsAndWarnings('from a_index | eval sum(numberField) > 0', [ + 'EVAL does not support function sum', + ]); + }); + + describe('median', () => { + testErrorsAndWarnings('from a_index | stats var = median(numberField)', []); + testErrorsAndWarnings('from a_index | stats median(numberField)', []); + testErrorsAndWarnings('from a_index | stats var = round(median(numberField))', []); + testErrorsAndWarnings('from a_index | stats round(median(numberField))', []); + + testErrorsAndWarnings( + 'from a_index | stats var = round(median(numberField)) + median(numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats round(median(numberField)) + median(numberField)', + [] + ); + + testErrorsAndWarnings('from a_index | stats median(numberField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = median(numberField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), median(numberField / 2)', []); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = median(numberField / 2)', + [] + ); + + testErrorsAndWarnings('from a_index | stats var0 = median(numberField)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), median(numberField)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = median(numberField)', + [] + ); + testErrorsAndWarnings( + 'from a_index | stats median(numberField) by round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var0 = median(numberField) by var1 = round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), median(numberField) by round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = median(numberField) by var1 = round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings('from a_index | stats var = median(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats median(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats median(stringField)', [ + 'Argument of [median] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | stats var = median(*)', [ + 'Using wildcards (*) in median is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort median(numberField)', [ + 'SORT does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(numberField)', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | where median(numberField) > 0', [ + 'WHERE does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(numberField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval var = median(numberField) > 0', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(numberField)', [ + 'EVAL does not support function median', + ]); + + testErrorsAndWarnings('from a_index | eval median(numberField) > 0', [ + 'EVAL does not support function median', + ]); + }); + + describe('median_absolute_deviation', () => { + testErrorsAndWarnings( + 'from a_index | stats var = median_absolute_deviation(numberField)', + [] + ); + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(numberField)', []); + + testErrorsAndWarnings( + 'from a_index | stats var = round(median_absolute_deviation(numberField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats round(median_absolute_deviation(numberField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var = round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats round(median_absolute_deviation(numberField)) + median_absolute_deviation(numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats median_absolute_deviation(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var0 = median_absolute_deviation(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), median_absolute_deviation(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var0 = median_absolute_deviation(numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), median_absolute_deviation(numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats median_absolute_deviation(numberField) by round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), median_absolute_deviation(numberField) by round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = median_absolute_deviation(numberField) by var1 = round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var = median_absolute_deviation(avg(numberField))', + [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ] + ); + + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats median_absolute_deviation(stringField)', [ + 'Argument of [median_absolute_deviation] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | stats var = median_absolute_deviation(*)', [ + 'Using wildcards (*) in median_absolute_deviation is not allowed', + ]); + + testErrorsAndWarnings('from a_index | sort median_absolute_deviation(numberField)', [ + 'SORT does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(numberField)', [ + 'WHERE does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | where median_absolute_deviation(numberField) > 0', [ + 'WHERE does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | eval var = median_absolute_deviation(numberField)', [ + 'EVAL does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = median_absolute_deviation(numberField) > 0', + ['EVAL does not support function median_absolute_deviation'] + ); + + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(numberField)', [ + 'EVAL does not support function median_absolute_deviation', + ]); + + testErrorsAndWarnings('from a_index | eval median_absolute_deviation(numberField) > 0', [ + 'EVAL does not support function median_absolute_deviation', + ]); + }); + + describe('percentile', () => { + testErrorsAndWarnings('from a_index | stats var = percentile(numberField, 5)', []); + testErrorsAndWarnings('from a_index | stats percentile(numberField, 5)', []); + testErrorsAndWarnings('from a_index | stats var = round(percentile(numberField, 5))', []); + testErrorsAndWarnings('from a_index | stats round(percentile(numberField, 5))', []); + + testErrorsAndWarnings( + 'from a_index | stats var = round(percentile(numberField, 5)) + percentile(numberField, 5)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats round(percentile(numberField, 5)) + percentile(numberField, 5)', + [] + ); + + testErrorsAndWarnings('from a_index | stats percentile(numberField, numberField)', [ + 'Argument of [percentile] must be a constant, received [numberField]', + ]); + + testErrorsAndWarnings('from a_index | stats percentile(numberField / 2, 5)', []); + testErrorsAndWarnings('from a_index | stats var0 = percentile(numberField / 2, 5)', []); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), percentile(numberField / 2, 5)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = percentile(numberField / 2, 5)', + [] + ); + + testErrorsAndWarnings('from a_index | stats var0 = percentile(numberField, 5)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), percentile(numberField, 5)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = percentile(numberField, 5)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats percentile(numberField, 5) by round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var0 = percentile(numberField, 5) by var1 = round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), percentile(numberField, 5) by round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = percentile(numberField, 5) by var1 = round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings('from a_index | stats var = percentile(avg(numberField), 5)', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats percentile(avg(numberField), 5)', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats percentile(stringField, 5)', [ + 'Argument of [percentile] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | sort percentile(numberField, 5)', [ + 'SORT does not support function percentile', + ]); + + testErrorsAndWarnings('from a_index | where percentile(numberField, 5)', [ + 'WHERE does not support function percentile', + ]); + + testErrorsAndWarnings('from a_index | where percentile(numberField, 5) > 0', [ + 'WHERE does not support function percentile', + ]); + + testErrorsAndWarnings('from a_index | eval var = percentile(numberField, 5)', [ + 'EVAL does not support function percentile', + ]); + + testErrorsAndWarnings('from a_index | eval var = percentile(numberField, 5) > 0', [ + 'EVAL does not support function percentile', + ]); + + testErrorsAndWarnings('from a_index | eval percentile(numberField, 5)', [ + 'EVAL does not support function percentile', + ]); + + testErrorsAndWarnings('from a_index | eval percentile(numberField, 5) > 0', [ + 'EVAL does not support function percentile', + ]); + }); + + describe('max', () => { + testErrorsAndWarnings('from a_index | stats var = max(numberField)', []); + testErrorsAndWarnings('from a_index | stats max(numberField)', []); + testErrorsAndWarnings('from a_index | stats var = round(max(numberField))', []); + testErrorsAndWarnings('from a_index | stats round(max(numberField))', []); + + testErrorsAndWarnings( + 'from a_index | stats var = round(max(numberField)) + max(numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats round(max(numberField)) + max(numberField)', + [] + ); + testErrorsAndWarnings('from a_index | stats max(numberField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = max(numberField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), max(numberField / 2)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = max(numberField / 2)', + [] + ); + testErrorsAndWarnings('from a_index | stats var0 = max(numberField)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), max(numberField)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), var0 = max(numberField)', []); + testErrorsAndWarnings( + 'from a_index | stats max(numberField) by round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var0 = max(numberField) by var1 = round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), max(numberField) by round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = max(numberField) by var1 = round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings('from a_index | stats var = max(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats max(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats max(stringField)', [ + 'Argument of [max] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | stats var = max(*)', [ + 'Using wildcards (*) in max is not allowed', + ]); + + testErrorsAndWarnings('from a_index | stats var = max(dateField)', []); + testErrorsAndWarnings('from a_index | stats max(dateField)', []); + testErrorsAndWarnings('from a_index | stats var = round(max(dateField))', []); + testErrorsAndWarnings('from a_index | stats round(max(dateField))', []); + testErrorsAndWarnings( + 'from a_index | stats var = round(max(dateField)) + max(dateField)', + [] + ); + testErrorsAndWarnings('from a_index | stats round(max(dateField)) + max(dateField)', []); + + testErrorsAndWarnings('from a_index | sort max(numberField)', [ + 'SORT does not support function max', + ]); + + testErrorsAndWarnings('from a_index | where max(numberField)', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | where max(numberField) > 0', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | where max(dateField)', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | where max(dateField) > 0', [ + 'WHERE does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(numberField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(numberField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(numberField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(numberField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(dateField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval var = max(dateField) > 0', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(dateField)', [ + 'EVAL does not support function max', + ]); + + testErrorsAndWarnings('from a_index | eval max(dateField) > 0', [ + 'EVAL does not support function max', + ]); + }); + + describe('min', () => { + testErrorsAndWarnings('from a_index | stats var = min(numberField)', []); + testErrorsAndWarnings('from a_index | stats min(numberField)', []); + testErrorsAndWarnings('from a_index | stats var = round(min(numberField))', []); + testErrorsAndWarnings('from a_index | stats round(min(numberField))', []); + + testErrorsAndWarnings( + 'from a_index | stats var = round(min(numberField)) + min(numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats round(min(numberField)) + min(numberField)', + [] + ); + testErrorsAndWarnings('from a_index | stats min(numberField / 2)', []); + testErrorsAndWarnings('from a_index | stats var0 = min(numberField / 2)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), min(numberField / 2)', []); + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = min(numberField / 2)', + [] + ); + testErrorsAndWarnings('from a_index | stats var0 = min(numberField)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), min(numberField)', []); + testErrorsAndWarnings('from a_index | stats avg(numberField), var0 = min(numberField)', []); + testErrorsAndWarnings( + 'from a_index | stats min(numberField) by round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var0 = min(numberField) by var1 = round(numberField / 2)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), ipField', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), min(numberField) by round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats avg(numberField), var0 = min(numberField) by var1 = round(numberField / 2), numberField / 2', + [] + ); + + testErrorsAndWarnings('from a_index | stats var = min(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats min(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats min(stringField)', [ + 'Argument of [min] must be [number], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | stats var = min(*)', [ + 'Using wildcards (*) in min is not allowed', + ]); + + testErrorsAndWarnings('from a_index | stats var = min(dateField)', []); + testErrorsAndWarnings('from a_index | stats min(dateField)', []); + testErrorsAndWarnings('from a_index | stats var = round(min(dateField))', []); + testErrorsAndWarnings('from a_index | stats round(min(dateField))', []); + testErrorsAndWarnings( + 'from a_index | stats var = round(min(dateField)) + min(dateField)', + [] + ); + testErrorsAndWarnings('from a_index | stats round(min(dateField)) + min(dateField)', []); + + testErrorsAndWarnings('from a_index | sort min(numberField)', [ + 'SORT does not support function min', + ]); + + testErrorsAndWarnings('from a_index | where min(numberField)', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | where min(numberField) > 0', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | where min(dateField)', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | where min(dateField) > 0', [ + 'WHERE does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(numberField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(numberField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(numberField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(numberField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(dateField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval var = min(dateField) > 0', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(dateField)', [ + 'EVAL does not support function min', + ]); + + testErrorsAndWarnings('from a_index | eval min(dateField) > 0', [ + 'EVAL does not support function min', + ]); + }); + + describe('count', () => { + testErrorsAndWarnings('from a_index | stats var = count(stringField)', []); + testErrorsAndWarnings('from a_index | stats count(stringField)', []); + testErrorsAndWarnings('from a_index | stats var = round(count(stringField))', []); + testErrorsAndWarnings('from a_index | stats round(count(stringField))', []); + + testErrorsAndWarnings( + 'from a_index | stats var = round(count(stringField)) + count(stringField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats round(count(stringField)) + count(stringField)', + [] + ); + + testErrorsAndWarnings('from a_index | sort count(stringField)', [ + 'SORT does not support function count', + ]); + + testErrorsAndWarnings('from a_index | where count(stringField)', [ + 'WHERE does not support function count', + ]); + + testErrorsAndWarnings('from a_index | where count(stringField) > 0', [ + 'WHERE does not support function count', + ]); + + testErrorsAndWarnings('from a_index | eval var = count(stringField)', [ + 'EVAL does not support function count', + ]); + + testErrorsAndWarnings('from a_index | eval var = count(stringField) > 0', [ + 'EVAL does not support function count', + ]); + + testErrorsAndWarnings('from a_index | eval count(stringField)', [ + 'EVAL does not support function count', + ]); + + testErrorsAndWarnings('from a_index | eval count(stringField) > 0', [ + 'EVAL does not support function count', + ]); + }); + + describe('count_distinct', () => { + testErrorsAndWarnings( + 'from a_index | stats var = count_distinct(stringField, numberField)', + [] + ); + testErrorsAndWarnings('from a_index | stats count_distinct(stringField, numberField)', []); + + testErrorsAndWarnings( + 'from a_index | stats var = round(count_distinct(stringField, numberField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats round(count_distinct(stringField, numberField))', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats var = round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)', + [] + ); + + testErrorsAndWarnings( + 'from a_index | stats round(count_distinct(stringField, numberField)) + count_distinct(stringField, numberField)', + [] + ); + + testErrorsAndWarnings('from a_index | sort count_distinct(stringField, numberField)', [ + 'SORT does not support function count_distinct', + ]); + + testErrorsAndWarnings('from a_index | where count_distinct(stringField, numberField)', [ + 'WHERE does not support function count_distinct', + ]); + + testErrorsAndWarnings('from a_index | where count_distinct(stringField, numberField) > 0', [ + 'WHERE does not support function count_distinct', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = count_distinct(stringField, numberField)', + ['EVAL does not support function count_distinct'] + ); + + testErrorsAndWarnings( + 'from a_index | eval var = count_distinct(stringField, numberField) > 0', + ['EVAL does not support function count_distinct'] + ); + + testErrorsAndWarnings('from a_index | eval count_distinct(stringField, numberField)', [ + 'EVAL does not support function count_distinct', + ]); + + testErrorsAndWarnings('from a_index | eval count_distinct(stringField, numberField) > 0', [ + 'EVAL does not support function count_distinct', + ]); + }); + + describe('st_centroid_agg', () => { + testErrorsAndWarnings( + 'from a_index | stats var = st_centroid_agg(cartesianPointField)', + [] + ); + testErrorsAndWarnings('from a_index | stats st_centroid_agg(cartesianPointField)', []); + + testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats st_centroid_agg(avg(numberField))', [ + "Aggregate function's parameters must be an attribute, literal or a non-aggregation function; found [avg(numberField)] of type [number]", + ]); + + testErrorsAndWarnings('from a_index | stats st_centroid_agg(stringField)', [ + 'Argument of [st_centroid_agg] must be [cartesian_point], found value [stringField] type [string]', + ]); + + testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(*)', [ + 'Using wildcards (*) in st_centroid_agg is not allowed', + ]); + + testErrorsAndWarnings('from a_index | stats var = st_centroid_agg(geoPointField)', []); + testErrorsAndWarnings('from a_index | stats st_centroid_agg(geoPointField)', []); + + testErrorsAndWarnings('from a_index | sort st_centroid_agg(cartesianPointField)', [ + 'SORT does not support function st_centroid_agg', + ]); + + testErrorsAndWarnings('from a_index | where st_centroid_agg(cartesianPointField)', [ + 'WHERE does not support function st_centroid_agg', + ]); + + testErrorsAndWarnings('from a_index | where st_centroid_agg(cartesianPointField) > 0', [ + 'WHERE does not support function st_centroid_agg', + ]); + + testErrorsAndWarnings('from a_index | where st_centroid_agg(geoPointField)', [ + 'WHERE does not support function st_centroid_agg', + ]); + + testErrorsAndWarnings('from a_index | where st_centroid_agg(geoPointField) > 0', [ + 'WHERE does not support function st_centroid_agg', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(cartesianPointField)', [ + 'EVAL does not support function st_centroid_agg', + ]); + + testErrorsAndWarnings( + 'from a_index | eval var = st_centroid_agg(cartesianPointField) > 0', + ['EVAL does not support function st_centroid_agg'] + ); + + testErrorsAndWarnings('from a_index | eval st_centroid_agg(cartesianPointField)', [ + 'EVAL does not support function st_centroid_agg', + ]); + + testErrorsAndWarnings('from a_index | eval st_centroid_agg(cartesianPointField) > 0', [ + 'EVAL does not support function st_centroid_agg', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(geoPointField)', [ + 'EVAL does not support function st_centroid_agg', + ]); + + testErrorsAndWarnings('from a_index | eval var = st_centroid_agg(geoPointField) > 0', [ + 'EVAL does not support function st_centroid_agg', + ]); + + testErrorsAndWarnings('from a_index | eval st_centroid_agg(geoPointField)', [ + 'EVAL does not support function st_centroid_agg', + ]); + + testErrorsAndWarnings('from a_index | eval st_centroid_agg(geoPointField) > 0', [ + 'EVAL does not support function st_centroid_agg', + ]); + }); + + describe('values', () => { + testErrorsAndWarnings('from a_index | stats var = values(stringField)', []); + testErrorsAndWarnings('from a_index | stats values(stringField)', []); + + testErrorsAndWarnings('from a_index | sort values(stringField)', [ + 'SORT does not support function values', + ]); + + testErrorsAndWarnings('from a_index | where values(stringField)', [ + 'WHERE does not support function values', + ]); + + testErrorsAndWarnings('from a_index | where values(stringField) > 0', [ + 'WHERE does not support function values', + ]); + + testErrorsAndWarnings('from a_index | eval var = values(stringField)', [ + 'EVAL does not support function values', + ]); + + testErrorsAndWarnings('from a_index | eval var = values(stringField) > 0', [ + 'EVAL does not support function values', + ]); + + testErrorsAndWarnings('from a_index | eval values(stringField)', [ + 'EVAL does not support function values', + ]); + + testErrorsAndWarnings('from a_index | eval values(stringField) > 0', [ + 'EVAL does not support function values', + ]); + }); + + describe('bucket', () => { + testErrorsAndWarnings('from a_index | stats by bucket(dateField, 1 year)', []); + testErrorsAndWarnings('from a_index | stats by bin(dateField, 1 year)', []); + testErrorsAndWarnings('from a_index | stats by bucket(numberField, 5)', []); + + testErrorsAndWarnings('from a_index | stats by bucket(numberField, numberField)', [ + 'Argument of [bucket] must be a constant, received [numberField]', + ]); + + testErrorsAndWarnings('from a_index | stats by bin(numberField, 5)', []); + testErrorsAndWarnings('from a_index | stats by bucket(dateField, 5, "a", "a")', []); + + testErrorsAndWarnings( + 'from a_index | stats by bucket(dateField, numberField, stringField, stringField)', + [ + '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]', + ] + ); + + testErrorsAndWarnings('from a_index | stats by bin(dateField, 5, "a", "a")', []); + testErrorsAndWarnings('from a_index | stats by bucket(dateField, 5, now(), now())', []); + + testErrorsAndWarnings( + 'from a_index | stats by bucket(dateField, numberField, dateField, dateField)', + [ + '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]', + ] + ); + + testErrorsAndWarnings('from a_index | stats by bin(dateField, 5, now(), now())', []); + testErrorsAndWarnings('from a_index | stats by bucket(dateField, 5, "a", now())', []); + + testErrorsAndWarnings( + 'from a_index | stats by bucket(dateField, numberField, stringField, dateField)', + [ + '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]', + ] + ); + + testErrorsAndWarnings('from a_index | stats by bin(dateField, 5, "a", now())', []); + testErrorsAndWarnings('from a_index | stats by bucket(dateField, 5, now(), "a")', []); + + testErrorsAndWarnings( + 'from a_index | stats by bucket(dateField, numberField, dateField, stringField)', + [ + '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]', + ] + ); + + testErrorsAndWarnings('from a_index | stats by bin(dateField, 5, now(), "a")', []); + testErrorsAndWarnings('from a_index | stats by bucket(numberField, 5, 5, 5)', []); + + testErrorsAndWarnings( + 'from a_index | stats by bucket(numberField, numberField, numberField, numberField)', + [ + '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]', + ] + ); + + testErrorsAndWarnings('from a_index | stats by bin(numberField, 5, 5, 5)', []); + + testErrorsAndWarnings('from a_index | sort bucket(dateField, 1 year)', [ + 'SORT does not support function bucket', + ]); }); }); }); diff --git a/packages/kbn-esql-validation-autocomplete/tsconfig.json b/packages/kbn-esql-validation-autocomplete/tsconfig.json index eea1faf19fa2d..59bed1b2893f0 100644 --- a/packages/kbn-esql-validation-autocomplete/tsconfig.json +++ b/packages/kbn-esql-validation-autocomplete/tsconfig.json @@ -9,7 +9,7 @@ }, "include": [ "src/**/*", - "**/*.ts", + "**/*.ts", "scripts", ], "kbn_references": [ "@kbn/i18n", diff --git a/packages/kbn-management/settings/setting_ids/index.ts b/packages/kbn-management/settings/setting_ids/index.ts index 93646978aa1a6..4fd4015baeb2c 100644 --- a/packages/kbn-management/settings/setting_ids/index.ts +++ b/packages/kbn-management/settings/setting_ids/index.ts @@ -123,6 +123,8 @@ export const OBSERVABILITY_ENABLE_COMPARISON_BY_DEFAULT_ID = 'observability:enableComparisonByDefault'; export const OBSERVABILITY_ENABLE_INFRASTRUCTURE_HOSTS_VIEW_ID = 'observability:enableInfrastructureHostsView'; +export const OBSERVABILITY_ENABLE_CONTAINER_ASSET_VIEW_ID = + 'observability:enableContainerAssetView'; export const OBSERVABILITY_ENABLE_INFRASTRUCTURE_ASSET_CUSTOM_DASHBOARDS_ID = 'observability:enableInfrastructureAssetCustomDashboards'; export const OBSERVABILITY_ENABLE_INSPECT_ES_QUERIES_ID = 'observability:enableInspectEsQueries'; diff --git a/packages/kbn-search-connectors/types/native_connectors.ts b/packages/kbn-search-connectors/types/native_connectors.ts index 24cb1bf42d711..422e31d2282be 100644 --- a/packages/kbn-search-connectors/types/native_connectors.ts +++ b/packages/kbn-search-connectors/types/native_connectors.ts @@ -4023,13 +4023,32 @@ export const NATIVE_CONNECTOR_DEFINITIONS: Record 1 && i < this.nodes.length - 1, onEarlyExit, writeLogsToPath, + disableEsTmpDir, }); }); } diff --git a/packages/kbn-text-based-editor/src/esql_documentation_sections.tsx b/packages/kbn-text-based-editor/src/esql_documentation_sections.tsx index 4b0fea2eae5ab..84dfcde890d66 100644 --- a/packages/kbn-text-based-editor/src/esql_documentation_sections.tsx +++ b/packages/kbn-text-based-editor/src/esql_documentation_sections.tsx @@ -106,16 +106,6 @@ Also, similar to the index fields, once an aggregation is performed, a metadata FROM employees [METADATA _index, _id] | STATS max = MAX(emp_no) BY _index \`\`\` - -The \`OPTIONS\` directive of the FROM command allows you to configure the way ES|QL accesses the data to be queried. The argument passed to this directive is a comma-separated list of option name-value pairs, with the option name and the corresponding value double-quoted. - -For example: - -\`\`\` -FROM index_pattern [OPTIONS "option1"="value1"[,...[,"optionN"="valueN"]]] -\`\`\` - -Learn more about the \`OPTIONS\` directive in the [main documentation page](https://www.elastic.co/guide/en/elasticsearch/reference/master/esql-index-options.html#esql-index-options). `, description: 'Text is in markdown. Do not translate function names, special characters, or field names like sum(bytes)', diff --git a/packages/shared-ux/chrome/navigation/__jest__/build_nav_tree.test.tsx b/packages/shared-ux/chrome/navigation/__jest__/build_nav_tree.test.tsx index 694f82bf9c079..3a9fb5177135b 100644 --- a/packages/shared-ux/chrome/navigation/__jest__/build_nav_tree.test.tsx +++ b/packages/shared-ux/chrome/navigation/__jest__/build_nav_tree.test.tsx @@ -7,7 +7,10 @@ */ import './setup_jest_mocks'; import { of } from 'rxjs'; -import type { NavigationTreeDefinitionUI } from '@kbn/core-chrome-browser'; +import type { + NavigationTreeDefinitionUI, + ChromeProjectNavigationNode, +} from '@kbn/core-chrome-browser'; import { renderNavigation } from './utils'; @@ -79,6 +82,59 @@ describe('builds navigation tree', () => { expect(await findByTestId(/nav-item-group1.group1A.group1A_1.item1/)).toBeVisible(); }); + test('should handle links on accordion toggle button', async () => { + const navigateToUrl = jest.fn(); + + const accordionNode: ChromeProjectNavigationNode = { + id: 'group1', + title: 'Group 1', + path: 'group1', + renderAs: 'accordion', + href: '/app/foo', // Accordion has an href + children: [ + { + id: 'item1', + title: 'Item 1', + href: 'https://foo', + path: 'group1.item1', + }, + ], + }; + + { + const { findByTestId, unmount } = renderNavigation({ + navTreeDef: of({ + body: [accordionNode], + }), + services: { navigateToUrl }, + }); + + const accordionToggleButton = await findByTestId(/nav-item-group1\s/); + accordionToggleButton.click(); + expect(navigateToUrl).not.toHaveBeenCalled(); + unmount(); + } + + { + const { findByTestId } = renderNavigation({ + navTreeDef: of({ + body: [ + { + ...accordionNode, + isCollapsible: false, // Non-collapsible accordion + }, + ], + }), + services: { navigateToUrl }, + }); + + const accordionToggleButton = await findByTestId(/nav-item-group1\s/); + accordionToggleButton.click(); + + expect(navigateToUrl).toHaveBeenCalledWith('/app/foo'); // Should navigate to the href + } + }); + test('should not render the group if it does not have children', async () => { const navTree: NavigationTreeDefinitionUI = { body: [ diff --git a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx index 8ceb84fde5de3..fe921f6bd0b73 100644 --- a/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx +++ b/packages/shared-ux/chrome/navigation/src/ui/components/navigation_section_ui.tsx @@ -184,7 +184,7 @@ const nodeToEuiCollapsibleNavProps = ( const { navNode, isItem, hasChildren, hasLink } = serializeNavNode(_navNode); const isActive = isActiveFromUrl(navNode.path, activeNodes); - const { id, path, href, renderAs } = navNode; + const { id, path, href, renderAs, isCollapsible = DEFAULT_IS_COLLAPSIBLE } = navNode; const isExternal = Boolean(href) && !navNode.isElasticInternalLink && isAbsoluteLink(href!); const isAccordion = hasChildren && !isItem; @@ -222,6 +222,9 @@ const nodeToEuiCollapsibleNavProps = ( } const onClick = (e: React.MouseEvent) => { + // Do not navigate if it is a collapsible accordion, link will be used in the breadcrumb + if (isAccordion && isCollapsible) return; + if (href !== undefined) { e.preventDefault(); navigateToUrl(href); diff --git a/renovate.json b/renovate.json index 9393a7b005225..cb8c4e6bfc339 100644 --- a/renovate.json +++ b/renovate.json @@ -1,19 +1,9 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:base" - ], - "ignorePaths": [ - "**/__fixtures__/**", - "**/fixtures/**" - ], - "enabledManagers": [ - "npm" - ], - "baseBranches": [ - "main", - "7.17" - ], + "extends": ["config:base"], + "ignorePaths": ["**/__fixtures__/**", "**/fixtures/**"], + "enabledManagers": ["npm"], + "baseBranches": ["main", "7.17"], "prConcurrentLimit": 0, "prHourlyLimit": 0, "separateMajorMinor": false, @@ -27,31 +17,17 @@ }, "packageRules": [ { - "matchPackagePatterns": [ - ".*" - ], + "matchPackagePatterns": [".*"], "enabled": false, "prCreation": "not-pending", "stabilityDays": 7 }, { "groupName": "@elastic/charts", - "matchPackageNames": [ - "@elastic/charts" - ], - "reviewers": [ - "team:visualizations", - "markov00", - "nickofthyme" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip", - "Team:Visualizations" - ], + "matchPackageNames": ["@elastic/charts"], + "reviewers": ["team:visualizations", "markov00", "nickofthyme"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip", "Team:Visualizations"], "draftPR": true, "enabled": true, "assignAutomerge": true, @@ -59,270 +35,117 @@ }, { "groupName": "@elastic/elasticsearch", - "matchPackageNames": [ - "@elastic/elasticsearch" - ], - "reviewers": [ - "team:kibana-operations", - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip", - "Team:Operations", - "Team:Core" - ], + "matchPackageNames": ["@elastic/elasticsearch"], + "reviewers": ["team:kibana-operations", "team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip", "Team:Operations", "Team:Core"], "enabled": true }, { "groupName": "@elastic/elasticsearch", - "matchPackageNames": [ - "@elastic/elasticsearch" - ], - "reviewers": [ - "team:kibana-operations", - "team:kibana-core" - ], - "matchBaseBranches": [ - "7.17" - ], - "labels": [ - "release_note:skip", - "Team:Operations", - "Team:Core", - "backport:skip" - ], + "matchPackageNames": ["@elastic/elasticsearch"], + "reviewers": ["team:kibana-operations", "team:kibana-core"], + "matchBaseBranches": ["7.17"], + "labels": ["release_note:skip", "Team:Operations", "Team:Core", "backport:skip"], "enabled": true }, { "groupName": "LaunchDarkly", - "matchPackageNames": [ - "launchdarkly-js-client-sdk", - "launchdarkly-node-server-sdk" - ], - "reviewers": [ - "team:kibana-security", - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "Team:Security", - "Team:Core", - "backport:prev-minor" - ], + "matchPackageNames": ["launchdarkly-js-client-sdk", "launchdarkly-node-server-sdk"], + "reviewers": ["team:kibana-security", "team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "Team:Security", "Team:Core", "backport:prev-minor"], "enabled": true }, { "groupName": "APM", - "matchPackageNames": [ - "elastic-apm-node", - "@elastic/apm-rum", - "@elastic/apm-rum-react" - ], - "reviewers": [ - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "Team:Core", - "backport:skip" - ], + "matchPackageNames": ["elastic-apm-node", "@elastic/apm-rum", "@elastic/apm-rum-react"], + "reviewers": ["team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "Team:Core", "backport:skip"], "enabled": true, "prCreation": "immediate" }, { "groupName": "ansi-regex", - "matchPackageNames": [ - "ansi-regex" - ], - "reviewers": [ - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "Team:Core", - "backport:skip" - ], + "matchPackageNames": ["ansi-regex"], + "reviewers": ["team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "Team:Core", "backport:skip"], "enabled": true }, { "groupName": "OpenAPI Spec", - "matchPackageNames": [ - "@redocly/cli" - ], - "reviewers": [ - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "Team:Core", - "backport:all-open" - ], + "matchPackageNames": ["@redocly/cli"], + "reviewers": ["team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "Team:Core", "backport:all-open"], "enabled": true }, { "groupName": "babel", - "matchPackageNames": [ - "@types/babel__core" - ], - "matchPackagePatterns": [ - "^@babel", - "^babel-plugin" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "matchPackageNames": ["@types/babel__core"], + "matchPackagePatterns": ["^@babel", "^babel-plugin"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "enabled": true }, { "groupName": "typescript", - "matchPackageNames": [ - "typescript", - "prettier", - "@types/jsdom" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "matchPackageNames": ["typescript", "prettier", "@types/jsdom"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "enabled": true }, { "groupName": "typescript-eslint", - "matchPackagePatterns": [ - "^@typescript-eslint" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "matchPackagePatterns": ["^@typescript-eslint"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "enabled": true }, { "groupName": "polyfills", - "matchPackageNames": [ - "core-js" - ], - "matchPackagePatterns": [ - "polyfill" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "matchPackageNames": ["core-js"], + "matchPackagePatterns": ["polyfill"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "enabled": true }, { "groupName": "CLI tooling", - "matchPackageNames": [ - "listr2" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "backport:all-open", - "release_note:skip" - ], + "matchPackageNames": ["listr2"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "backport:all-open", "release_note:skip"], "enabled": true }, { "groupName": "vega related modules", - "matchPackageNames": [ - "vega", - "vega-lite", - "vega-schema-url-parser", - "vega-tooltip" - ], - "reviewers": [ - "team:kibana-visualizations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Feature:Vega", - "Team:Visualizations" - ], + "matchPackageNames": ["vega", "vega-lite", "vega-schema-url-parser", "vega-tooltip"], + "reviewers": ["team:kibana-visualizations"], + "matchBaseBranches": ["main"], + "labels": ["Feature:Vega", "Team:Visualizations"], "enabled": true }, { "groupName": "cypress", - "matchPackagePatterns": [ - "cypress" - ], - "reviewers": [ - "Team:apm", - "Team: SecuritySolution" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "buildkite-ci", - "ci:all-cypress-suites" - ], + "matchPackagePatterns": ["cypress"], + "reviewers": ["Team:apm", "Team: SecuritySolution"], + "matchBaseBranches": ["main"], + "labels": ["buildkite-ci", "ci:all-cypress-suites"], "enabled": true }, { "groupName": "security solution modules", - "matchPackageNames": [ - "zod", - "langchain" - ], - "reviewers": [ - "Team: SecuritySolution" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team: SecuritySolution" - ], + "matchPackageNames": ["zod", "langchain"], + "reviewers": ["Team: SecuritySolution"], + "matchBaseBranches": ["main"], + "labels": ["Team: SecuritySolution"], "enabled": true }, { @@ -339,17 +162,9 @@ "@types/xml-crypto", "@kayahr/text-encoding" ], - "reviewers": [ - "team:kibana-security" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Security", - "release_note:skip", - "backport:all-open" - ], + "reviewers": ["team:kibana-security"], + "matchBaseBranches": ["main"], + "labels": ["Team:Security", "release_note:skip", "backport:all-open"], "enabled": true }, { @@ -362,52 +177,25 @@ "ms-chromium-edge-driver", "selenium-webdriver" ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "enabled": true }, { "groupName": "scss", - "packageNames": [ - "sass-embedded" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip", - "backport:all-open" - ], + "packageNames": ["sass-embedded"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip", "backport:all-open"], "enabled": true }, { "groupName": "minify", - "packageNames": [ - "gulp-terser", - "terser" - ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "packageNames": ["gulp-terser", "terser"], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "enabled": true }, { @@ -420,16 +208,9 @@ "@testing-library/user-event", "@types/testing-library__jest-dom" ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "enabled": true }, { @@ -450,67 +231,33 @@ "jest-runtime", "jest-snapshot" ], - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Operations", - "release_note:skip" - ], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "labels": ["Team:Operations", "release_note:skip"], "enabled": true }, { "groupName": "@storybook", - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "matchPackagePatterns": [ - "^@storybook" - ], - "excludePackageNames": [ - "@storybook/testing-react" - ], - "labels": [ - "Team:Operations", - "release_note:skip", - "ci:build-storybooks", - "backport:skip" - ], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "matchPackagePatterns": ["^@storybook"], + "excludePackageNames": ["@storybook/testing-react"], + "labels": ["Team:Operations", "release_note:skip", "ci:build-storybooks", "backport:skip"], "enabled": true, "allowedVersions": "<7.0" }, { "groupName": "@storybook/testing-react", - "reviewers": [ - "team:kibana-operations" - ], - "matchBaseBranches": [ - "main" - ], - "matchPackageNames": [ - "@storybook/testing-react" - ], - "labels": [ - "Team:Operations", - "release_note:skip", - "ci:build-storybooks", - "backport:skip" - ], + "reviewers": ["team:kibana-operations"], + "matchBaseBranches": ["main"], + "matchPackageNames": ["@storybook/testing-react"], + "labels": ["Team:Operations", "release_note:skip", "ci:build-storybooks", "backport:skip"], "enabled": true, "allowedVersions": "<2.0" }, { "groupName": "react-query", - "packageNames": [ - "@tanstack/react-query", - "@tanstack/react-query-devtools" - ], + "packageNames": ["@tanstack/react-query", "@tanstack/react-query-devtools"], "reviewers": [ "team:response-ops", "team:kibana-cloud-security-posture", @@ -519,41 +266,21 @@ "team:awp-platform", "team:security-onboarding-and-lifecycle-mgt" ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip", - "ci:all-cypress-suites" - ], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip", "ci:all-cypress-suites"], "enabled": true }, { "groupName": "react-hook-form", - "packageNames": [ - "react-hook-form" - ], - "reviewers": [ - "team:security-asset-management", - "team:uptime" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip", - "ci:all-cypress-suites" - ], + "packageNames": ["react-hook-form"], + "reviewers": ["team:security-asset-management", "team:uptime"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip", "ci:all-cypress-suites"], "enabled": true }, { "groupName": "redux", - "packageNames": [ - "redux", - "react-redux" - ], + "packageNames": ["redux", "react-redux"], "reviewers": [ "team:enterprise-search-frontend", "team:kibana-presentation", @@ -562,182 +289,93 @@ "team:kibana-gis", "team:security-solution" ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip", - "ci:all-cypress-suites" - ], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip", "ci:all-cypress-suites"], "enabled": true }, { "groupName": "Profiling", - "matchPackageNames": [ - "peggy", - "@types/dagre" - ], - "reviewers": [ - "team:profiling-ui" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip" - ], + "matchPackageNames": ["peggy", "@types/dagre"], + "reviewers": ["team:profiling-ui"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip"], "enabled": true, "prCreation": "immediate" }, { "groupName": "TTY Output", - "matchPackageNames": [ - "xterm", - "byte-size", - "@types/byte-size" - ], - "reviewers": [ - "team:sec-cloudnative-integrations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team: AWP: Visualization", - "release_note:skip", - "backport:skip" - ], + "matchPackageNames": ["xterm", "byte-size", "@types/byte-size"], + "reviewers": ["team:sec-cloudnative-integrations"], + "matchBaseBranches": ["main"], + "labels": ["Team: AWP: Visualization", "release_note:skip", "backport:skip"], "enabled": true, "prCreation": "immediate" }, { "groupName": "Cloud Defend", - "matchPackageNames": [ - "monaco-yaml" - ], - "reviewers": [ - "team:sec-cloudnative-integrations" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team: Cloud Native Integrations", - "release_note:skip", - "backport:skip" - ], + "matchPackageNames": ["monaco-yaml"], + "reviewers": ["team:sec-cloudnative-integrations"], + "matchBaseBranches": ["main"], + "labels": ["Team: Cloud Native Integrations", "release_note:skip", "backport:skip"], "enabled": true, "prCreation": "immediate" }, { "groupName": "JSON Web Token", - "matchPackageNames": [ - "jsonwebtoken" - ], - "reviewers": [ - "team:response-ops", - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:all-open" - ], + "matchPackageNames": ["jsonwebtoken"], + "reviewers": ["team:response-ops", "team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:all-open"], "enabled": true }, { "groupName": "XState", - "matchPackageNames": [ - "xstate" - ], - "matchPackagePrefixes": [ - "@xstate/" - ], - "reviewers": [ - "team:obs-ux-logs" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Obs UX Logs", - "release_note:skip" - ], + "matchPackageNames": ["xstate"], + "matchPackagePrefixes": ["@xstate/"], + "reviewers": ["team:obs-ux-logs"], + "matchBaseBranches": ["main"], + "labels": ["Team:Obs UX Logs", "release_note:skip"], "enabled": true, "prCreation": "immediate" }, { "groupName": "OpenTelemetry modules", - "matchPackagePrefixes": [ - "@opentelemetry/" - ], - "reviewers": [ - "team:monitoring" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:Monitoring" - ], + "matchPackagePrefixes": ["@opentelemetry/"], + "reviewers": ["team:monitoring"], + "matchBaseBranches": ["main"], + "labels": ["Team:Monitoring"], "enabled": true }, { "groupName": "csp", - "packageNames": [ - "content-security-policy-parser" - ], - "reviewers": [ - "team:kibana-security", - "team:kibana-core" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:skip", - "ci:serverless-test-all" - ], + "packageNames": ["content-security-policy-parser"], + "reviewers": ["team:kibana-security", "team:kibana-core"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:skip", "ci:serverless-test-all"], "enabled": true }, { "groupName": "AlertingEmails", - "matchPackageNames": [ - "nodemailer" - ], - "reviewers": [ - "team:response-ops" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "release_note:skip", - "backport:prev-minor" - ], + "matchPackageNames": ["nodemailer"], + "reviewers": ["team:response-ops"], + "matchBaseBranches": ["main"], + "labels": ["release_note:skip", "backport:prev-minor"], "enabled": true }, { "groupName": "machine learning modules", - "matchPackageNames": [ - "apidoc-markdown" - ], - "reviewers": [ - "team:ml-ui" - ], - "matchBaseBranches": [ - "main" - ], - "labels": [ - "Team:ML", - "release_note:skip", - "backport:all-open" - ], + "matchPackageNames": ["apidoc-markdown"], + "reviewers": ["team:ml-ui"], + "matchBaseBranches": ["main"], + "labels": ["Team:ML", "release_note:skip", "backport:all-open"], + "enabled": true + }, + { + "groupName": "Kibana ES|QL Team", + "matchPackageNames": ["recast"], + "reviewers": ["team:kibana-esql"], + "matchBaseBranches": ["main"], + "labels": ["Team:ESQL", "release_note:skip"], "enabled": true } ] diff --git a/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap b/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap index 70dabc254ed51..538a4102f09ff 100644 --- a/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap +++ b/src/plugins/chart_expressions/expression_xy/public/components/__snapshots__/xy_chart.test.tsx.snap @@ -1142,6 +1142,7 @@ exports[`XYChart component it renders area 1`] = ` onElementClick={[Function]} onPointerUpdate={[Function]} onRenderChange={[Function]} + pointerUpdateDebounce={0} rotation={0} showLegend={false} showLegendExtra={false} @@ -2691,6 +2692,7 @@ exports[`XYChart component it renders bar 1`] = ` onElementClick={[Function]} onPointerUpdate={[Function]} onRenderChange={[Function]} + pointerUpdateDebounce={0} rotation={0} showLegend={false} showLegendExtra={false} @@ -4240,6 +4242,7 @@ exports[`XYChart component it renders horizontal bar 1`] = ` onElementClick={[Function]} onPointerUpdate={[Function]} onRenderChange={[Function]} + pointerUpdateDebounce={0} rotation={90} showLegend={false} showLegendExtra={false} @@ -5789,6 +5792,7 @@ exports[`XYChart component it renders line 1`] = ` onElementClick={[Function]} onPointerUpdate={[Function]} onRenderChange={[Function]} + pointerUpdateDebounce={0} rotation={0} showLegend={false} showLegendExtra={false} @@ -7338,6 +7342,7 @@ exports[`XYChart component it renders stacked area 1`] = ` onElementClick={[Function]} onPointerUpdate={[Function]} onRenderChange={[Function]} + pointerUpdateDebounce={0} rotation={0} showLegend={false} showLegendExtra={false} @@ -8887,6 +8892,7 @@ exports[`XYChart component it renders stacked bar 1`] = ` onElementClick={[Function]} onPointerUpdate={[Function]} onRenderChange={[Function]} + pointerUpdateDebounce={0} rotation={0} showLegend={false} showLegendExtra={false} @@ -10436,6 +10442,7 @@ exports[`XYChart component it renders stacked horizontal bar 1`] = ` onElementClick={[Function]} onPointerUpdate={[Function]} onRenderChange={[Function]} + pointerUpdateDebounce={0} rotation={90} showLegend={false} showLegendExtra={false} @@ -12015,6 +12022,7 @@ exports[`XYChart component split chart should render split chart if both, splitR onElementClick={[Function]} onPointerUpdate={[Function]} onRenderChange={[Function]} + pointerUpdateDebounce={0} rotation={0} showLegend={false} showLegendExtra={false} @@ -13802,6 +13810,7 @@ exports[`XYChart component split chart should render split chart if splitColumnA onElementClick={[Function]} onPointerUpdate={[Function]} onRenderChange={[Function]} + pointerUpdateDebounce={0} rotation={0} showLegend={false} showLegendExtra={false} @@ -15582,6 +15591,7 @@ exports[`XYChart component split chart should render split chart if splitRowAcce onElementClick={[Function]} onPointerUpdate={[Function]} onRenderChange={[Function]} + pointerUpdateDebounce={0} rotation={0} showLegend={false} showLegendExtra={false} 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 21025a09c4e47..ed4f6ffad6a73 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 @@ -812,6 +812,7 @@ export function XYChart({ /> } onRenderChange={onRenderChange} + pointerUpdateDebounce={0} // use the `handleCursorUpdate` debounce time onPointerUpdate={syncCursor ? handleCursorUpdate : undefined} externalPointerEvents={{ tooltip: { visible: syncTooltips, placement: Placement.Right }, diff --git a/src/plugins/charts/public/services/active_cursor/use_active_cursor.ts b/src/plugins/charts/public/services/active_cursor/use_active_cursor.ts index 3bb40b33b566c..e06c6096664c8 100644 --- a/src/plugins/charts/public/services/active_cursor/use_active_cursor.ts +++ b/src/plugins/charts/public/services/active_cursor/use_active_cursor.ts @@ -18,7 +18,7 @@ import { parseSyncOptions } from './active_cursor_utils'; import type { ActiveCursor } from './active_cursor'; import type { ActiveCursorSyncOption } from './types'; -const DEFAULT_DEBOUNCE_TIME = 40; +const DEFAULT_DEBOUNCE_TIME_MS = 8; // don't update more than once per frame but try to avoid skipping frames export const useActiveCursor = ( activeCursor: ActiveCursor, @@ -40,7 +40,7 @@ export const useActiveCursor = ( useEffect(() => { const cursorSubscription = activeCursor.activeCursor$ ?.pipe( - debounceTime(syncOptions.debounce ?? DEFAULT_DEBOUNCE_TIME, animationFrameScheduler), + debounceTime(syncOptions.debounce ?? DEFAULT_DEBOUNCE_TIME_MS, animationFrameScheduler), filter((payload) => { if (payload.isDateHistogram && isDateHistogram) { return true; diff --git a/src/plugins/discover/common/app_locator.test.ts b/src/plugins/discover/common/app_locator.test.ts index 78d0d32fd6ed2..9b9c328689ffc 100644 --- a/src/plugins/discover/common/app_locator.test.ts +++ b/src/plugins/discover/common/app_locator.test.ts @@ -15,6 +15,7 @@ import { mockStorage } from '@kbn/kibana-utils-plugin/public/storage/hashed_item import { FilterStateStore } from '@kbn/es-query'; import { DiscoverAppLocatorDefinition } from './app_locator'; import { SerializableRecord } from '@kbn/utility-types'; +import { createDataViewDataSource, createEsqlDataSource } from './data_sources'; const dataViewId: string = 'c367b774-a4c2-11ea-bb37-0242ac130002'; const savedSearchId: string = '571aaf70-4c88-11e8-b3d7-01146121b73d'; @@ -63,7 +64,7 @@ describe('Discover url generator', () => { const { _a, _g } = getStatesFromKbnUrl(path, ['_a', '_g']); expect(_a).toEqual({ - index: dataViewId, + dataSource: createDataViewDataSource({ dataViewId }), }); expect(_g).toEqual(undefined); }); @@ -104,6 +105,25 @@ describe('Discover url generator', () => { expect(_g).toEqual(undefined); }); + test('can specify an ES|QL query', async () => { + const { locator } = await setup(); + const { path } = await locator.getLocation({ + dataViewId, + query: { + esql: 'SELECT * FROM test', + }, + }); + const { _a, _g } = getStatesFromKbnUrl(path, ['_a', '_g']); + + expect(_a).toEqual({ + dataSource: createEsqlDataSource(), + query: { + esql: 'SELECT * FROM test', + }, + }); + expect(_g).toEqual(undefined); + }); + test('can specify local and global filters', async () => { const { locator } = await setup(); const { path } = await locator.getLocation({ diff --git a/src/plugins/discover/common/app_locator.ts b/src/plugins/discover/common/app_locator.ts index 144f052c2a44d..fe39f92b79d22 100644 --- a/src/plugins/discover/common/app_locator.ts +++ b/src/plugins/discover/common/app_locator.ts @@ -7,13 +7,15 @@ */ import type { SerializableRecord } from '@kbn/utility-types'; -import type { Filter, TimeRange, Query, AggregateQuery } from '@kbn/es-query'; +import { Filter, TimeRange, Query, AggregateQuery, isOfAggregateQueryType } from '@kbn/es-query'; import type { GlobalQueryStateFromUrl, RefreshInterval } from '@kbn/data-plugin/public'; import type { LocatorDefinition, LocatorPublic } from '@kbn/share-plugin/public'; import type { DiscoverGridSettings } from '@kbn/saved-search-plugin/common'; import { DataViewSpec } from '@kbn/data-views-plugin/common'; import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/common'; import { VIEW_MODE } from './constants'; +import type { DiscoverAppState } from '../public'; +import { createDataViewDataSource, createEsqlDataSource } from './data_sources'; export const DISCOVER_APP_LOCATOR = 'DISCOVER_APP_LOCATOR'; @@ -150,32 +152,21 @@ export class DiscoverAppLocatorDefinition implements LocatorDefinition = {}; const queryState: GlobalQueryStateFromUrl = {}; const { isFilterPinned } = await import('@kbn/es-query'); if (query) appState.query = query; if (filters && filters.length) appState.filters = filters?.filter((f) => !isFilterPinned(f)); - if (indexPatternId) appState.index = indexPatternId; - if (dataViewId) appState.index = dataViewId; + if (indexPatternId) + appState.dataSource = createDataViewDataSource({ dataViewId: indexPatternId }); + if (dataViewId) appState.dataSource = createDataViewDataSource({ dataViewId }); + if (isOfAggregateQueryType(query)) appState.dataSource = createEsqlDataSource(); if (columns) appState.columns = columns; if (grid) appState.grid = grid; if (savedQuery) appState.savedQuery = savedQuery; if (sort) appState.sort = sort; if (interval) appState.interval = interval; - if (timeRange) queryState.time = timeRange; if (filters && filters.length) queryState.filters = filters?.filter((f) => isFilterPinned(f)); if (refreshInterval) queryState.refreshInterval = refreshInterval; diff --git a/src/plugins/discover/common/data_sources/index.ts b/src/plugins/discover/common/data_sources/index.ts new file mode 100644 index 0000000000000..78615e777bc3e --- /dev/null +++ b/src/plugins/discover/common/data_sources/index.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export * from './utils'; +export * from './types'; diff --git a/src/plugins/discover/common/data_sources/types.ts b/src/plugins/discover/common/data_sources/types.ts new file mode 100644 index 0000000000000..aee1aa4cc68d1 --- /dev/null +++ b/src/plugins/discover/common/data_sources/types.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export enum DataSourceType { + DataView = 'dataView', + Esql = 'esql', +} + +export interface DataViewDataSource { + type: DataSourceType.DataView; + dataViewId: string; +} + +export interface EsqlDataSource { + type: DataSourceType.Esql; +} + +export type DiscoverDataSource = DataViewDataSource | EsqlDataSource; diff --git a/src/plugins/discover/common/data_sources/utils.ts b/src/plugins/discover/common/data_sources/utils.ts new file mode 100644 index 0000000000000..4bf8b0fcf3678 --- /dev/null +++ b/src/plugins/discover/common/data_sources/utils.ts @@ -0,0 +1,27 @@ +/* + * 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 { DataSourceType, DataViewDataSource, DiscoverDataSource, EsqlDataSource } from './types'; + +export const createDataViewDataSource = ({ + dataViewId, +}: { + dataViewId: string; +}): DataViewDataSource => ({ + type: DataSourceType.DataView, + dataViewId, +}); + +export const createEsqlDataSource = (): EsqlDataSource => ({ + type: DataSourceType.Esql, +}); + +export const isDataSourceType = ( + dataSource: DiscoverDataSource | undefined, + type: T +): dataSource is Extract => dataSource?.type === type; diff --git a/src/plugins/discover/common/data_types/logs/constants.ts b/src/plugins/discover/common/data_types/logs/constants.ts new file mode 100644 index 0000000000000..5726bf8439b8f --- /dev/null +++ b/src/plugins/discover/common/data_types/logs/constants.ts @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { fieldConstants } from '@kbn/discover-utils'; +import { SmartFieldGridColumnOptions } from './display_options'; + +export * from '@kbn/discover-utils/src/field_constants'; + +export const LOGS_EXPLORER_PROFILE_ID = 'logs-explorer'; + +// Virtual column fields +export const CONTENT_FIELD = 'content'; +export const RESOURCE_FIELD = 'resource'; + +// Sizing +export const DATA_GRID_COLUMN_WIDTH_SMALL = 240; +export const DATA_GRID_COLUMN_WIDTH_MEDIUM = 320; +export const ACTIONS_COLUMN_WIDTH = 80; + +export const RESOURCE_FIELD_CONFIGURATION: SmartFieldGridColumnOptions = { + type: 'smart-field', + smartField: RESOURCE_FIELD, + fallbackFields: [fieldConstants.HOST_NAME_FIELD, fieldConstants.SERVICE_NAME_FIELD], + width: DATA_GRID_COLUMN_WIDTH_MEDIUM, +}; + +export const CONTENT_FIELD_CONFIGURATION: SmartFieldGridColumnOptions = { + type: 'smart-field', + smartField: CONTENT_FIELD, + fallbackFields: [fieldConstants.MESSAGE_FIELD], +}; + +export const SMART_FALLBACK_FIELDS = { + [CONTENT_FIELD]: CONTENT_FIELD_CONFIGURATION, + [RESOURCE_FIELD]: RESOURCE_FIELD_CONFIGURATION, +}; + +// UI preferences +export const DEFAULT_COLUMNS = [RESOURCE_FIELD_CONFIGURATION, CONTENT_FIELD_CONFIGURATION]; +export const DEFAULT_ROWS_PER_PAGE = 100; + +// List of prefixes which needs to be filtered out for Display in Content Column +export const FILTER_OUT_FIELDS_PREFIXES_FOR_CONTENT = [ + '_', // Filter fields like '_id', '_score' + '@timestamp', + 'agent.', + 'elastic_agent.', + 'data_stream.', + 'ecs.', + 'host.', + 'container.', + 'cloud.', + 'kubernetes.', + 'orchestrator.', + 'log.', + 'service.', +]; + +export const DEFAULT_ALLOWED_DATA_VIEWS = ['logs', 'auditbeat', 'filebeat', 'winlogbeat']; +export const DEFAULT_ALLOWED_LOGS_DATA_VIEWS = ['logs', 'auditbeat', 'filebeat', 'winlogbeat']; diff --git a/src/plugins/discover/common/data_types/logs/display_options.ts b/src/plugins/discover/common/data_types/logs/display_options.ts new file mode 100644 index 0000000000000..13c760649bbbe --- /dev/null +++ b/src/plugins/discover/common/data_types/logs/display_options.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +export interface SmartFieldGridColumnOptions { + type: 'smart-field'; + smartField: 'content' | 'resource'; + fallbackFields: string[]; + width?: number; +} diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx index 0fcd292472145..ae4b05f495cfa 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.test.tsx @@ -25,6 +25,7 @@ import { DiscoverAppState } from '../../state_management/discover_app_state_cont import { DiscoverCustomization, DiscoverCustomizationProvider } from '../../../../customizations'; import { createCustomizationService } from '../../../../customizations/customization_service'; import { DiscoverGrid } from '../../../../components/discover_grid'; +import { createDataViewDataSource } from '../../../../../common/data_sources'; const customisationService = createCustomizationService(); @@ -39,7 +40,9 @@ async function mountComponent(fetchStatus: FetchStatus, hits: EsHitRecord[]) { result: hits.map((hit) => buildDataTableRecord(hit, dataViewMock)), }) as DataDocuments$; const stateContainer = getDiscoverStateMock({}); - stateContainer.appState.update({ index: dataViewMock.id }); + stateContainer.appState.update({ + dataSource: createDataViewDataSource({ dataViewId: dataViewMock.id! }), + }); stateContainer.dataState.data$.documents$ = documents$; const props = { @@ -106,17 +109,6 @@ describe('Discover documents layout', () => { }); test('should render customisations', async () => { - const customCellRenderer = { - content: () => Test, - }; - - const customGridColumnsConfiguration = { - content: () => ({ - id: 'content', - displayText: Column, - }), - }; - const customControlColumnsConfiguration = () => ({ leadingControlColumns: [], trailingControlColumns: [], @@ -124,8 +116,7 @@ describe('Discover documents layout', () => { const customization: DiscoverCustomization = { id: 'data_table', - customCellRenderer, - customGridColumnsConfiguration, + logsEnabled: true, customControlColumnsConfiguration, }; @@ -134,12 +125,10 @@ describe('Discover documents layout', () => { const discoverGridComponent = component.find(DiscoverGrid); expect(discoverGridComponent.exists()).toBeTruthy(); - expect(discoverGridComponent.prop('externalCustomRenderers')).toEqual(customCellRenderer); - expect(discoverGridComponent.prop('customGridColumnsConfiguration')).toEqual( - customGridColumnsConfiguration - ); expect(discoverGridComponent.prop('customControlColumnsConfiguration')).toEqual( customControlColumnsConfiguration ); + expect(discoverGridComponent.prop('externalCustomRenderers')).toBeDefined(); + expect(discoverGridComponent.prop('customGridColumnsConfiguration')).toBeDefined(); }); }); diff --git a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx index 8671cc289c281..b5f50f2ca9c14 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_documents.tsx @@ -67,6 +67,7 @@ import { useFetchMoreRecords } from './use_fetch_more_records'; import { SelectedVSAvailableCallout } from './selected_vs_available_callout'; import { useDiscoverCustomization } from '../../../../customizations'; import { onResizeGridColumn } from '../../../../utils/on_resize_grid_column'; +import { useContextualGridCustomisations } from '../../hooks/grid_customisations'; const containerStyles = css` position: relative; @@ -108,38 +109,20 @@ function DiscoverDocumentsComponent({ const documents$ = stateContainer.dataState.data$.documents$; const savedSearch = useSavedSearchInitial(); const { dataViews, capabilities, uiSettings, uiActions } = services; - const [ - query, - sort, - rowHeight, - headerRowHeight, - rowsPerPage, - grid, - columns, - index, - sampleSizeState, - ] = useAppStateSelector((state) => { - return [ - state.query, - state.sort, - state.rowHeight, - state.headerRowHeight, - state.rowsPerPage, - state.grid, - state.columns, - state.index, - state.sampleSize, - ]; - }); - const setExpandedDoc = useCallback( - (doc: DataTableRecord | undefined) => { - stateContainer.internalState.transitions.setExpandedDoc(doc); - }, - [stateContainer] - ); - + const [query, sort, rowHeight, headerRowHeight, rowsPerPage, grid, columns, sampleSizeState] = + useAppStateSelector((state) => { + return [ + state.query, + state.sort, + state.rowHeight, + state.headerRowHeight, + state.rowsPerPage, + state.grid, + state.columns, + state.sampleSize, + ]; + }); const expandedDoc = useInternalStateSelector((state) => state.expandedDoc); - const isTextBasedQuery = useMemo(() => getRawRecordType(query) === RecordRawType.PLAIN, [query]); const useNewFieldsApi = useMemo(() => !uiSettings.get(SEARCH_FIELDS_FROM_SOURCE), [uiSettings]); const hideAnnouncements = useMemo(() => uiSettings.get(HIDE_ANNOUNCEMENTS), [uiSettings]); @@ -147,7 +130,6 @@ function DiscoverDocumentsComponent({ () => isLegacyTableEnabled({ uiSettings, isTextBasedQueryMode: isTextBasedQuery }), [uiSettings, isTextBasedQuery] ); - const documentState = useDataState(documents$); const isDataLoading = documentState.fetchStatus === FetchStatus.LOADING || @@ -162,7 +144,8 @@ function DiscoverDocumentsComponent({ // 4. since the new sort by field isn't available in currentColumns EuiDataGrid is emitting a 'onSort', which is unsorting the grid // 5. this is propagated to Discover's URL and causes an unwanted change of state to an unsorted state // This solution switches to the loading state in this component when the URL index doesn't match the dataView.id - const isDataViewLoading = !isTextBasedQuery && dataView.id && index !== dataView.id; + const isDataViewLoading = + useInternalStateSelector((state) => state.isDataViewLoading) && !isTextBasedQuery; const isEmptyDataResult = isTextBasedQuery || !documentState.result || documentState.result.length === 0; const rows = useMemo(() => documentState.result || [], [documentState.result]); @@ -189,6 +172,13 @@ function DiscoverDocumentsComponent({ sort, }); + const setExpandedDoc = useCallback( + (doc: DataTableRecord | undefined) => { + stateContainer.internalState.transitions.setExpandedDoc(doc); + }, + [stateContainer] + ); + const onResizeDataGrid = useCallback( (colSettings) => onResize(colSettings, stateContainer), [stateContainer] @@ -269,11 +259,9 @@ function DiscoverDocumentsComponent({ [dataView, onAddColumn, onAddFilter, onRemoveColumn, query, savedSearch.id, setExpandedDoc] ); - const { - customCellRenderer: externalCustomRenderers, - customGridColumnsConfiguration, - customControlColumnsConfiguration, - } = useDiscoverCustomization('data_table') || {}; + const { customControlColumnsConfiguration } = useDiscoverCustomization('data_table') || {}; + const { customCellRenderer, customGridColumnsConfiguration } = + useContextualGridCustomisations() || {}; const documents = useObservable(stateContainer.dataState.data$.documents$); @@ -443,7 +431,7 @@ function DiscoverDocumentsComponent({ totalHits={totalHits} onFetchMoreRecords={onFetchMoreRecords} componentsTourSteps={TOUR_STEPS} - externalCustomRenderers={externalCustomRenderers} + externalCustomRenderers={customCellRenderer} customGridColumnsConfiguration={customGridColumnsConfiguration} customControlColumnsConfiguration={customControlColumnsConfiguration} /> diff --git a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx index a1d450d6aa61b..7ce8f987e5911 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_histogram_layout.test.tsx @@ -34,13 +34,14 @@ import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock' import { DiscoverMainProvider } from '../../state_management/discover_state_provider'; import { act } from 'react-dom/test-utils'; import { PanelsToggle } from '../../../../components/panels_toggle'; +import { createDataViewDataSource } from '../../../../../common/data_sources'; function getStateContainer(savedSearch?: SavedSearch) { const stateContainer = getDiscoverStateMock({ isTimeBased: true, savedSearch }); const dataView = savedSearch?.searchSource?.getField('index') as DataView; stateContainer.appState.update({ - index: dataView?.id, + dataSource: createDataViewDataSource({ dataViewId: dataView?.id! }), interval: 'auto', hideChart: false, }); diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx index 248b530515451..c1cc257f58cc3 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.test.tsx @@ -39,6 +39,7 @@ import { DiscoverMainProvider } from '../../state_management/discover_state_prov import { act } from 'react-dom/test-utils'; import { ErrorCallout } from '../../../../components/common/error_callout'; import { PanelsToggle } from '../../../../components/panels_toggle'; +import { createDataViewDataSource } from '../../../../../common/data_sources'; jest.mock('@elastic/eui', () => ({ ...jest.requireActual('@elastic/eui'), @@ -106,7 +107,11 @@ async function mountComponent( session.getSession$.mockReturnValue(new BehaviorSubject('123')); - stateContainer.appState.update({ index: dataView.id, interval: 'auto', query }); + stateContainer.appState.update({ + dataSource: createDataViewDataSource({ dataViewId: dataView.id! }), + interval: 'auto', + query, + }); stateContainer.internalState.transitions.setDataView(dataView); const props = { diff --git a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx index 24c92fd192408..7065e511951b6 100644 --- a/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx +++ b/src/plugins/discover/public/application/main/components/layout/discover_layout.tsx @@ -329,7 +329,6 @@ export function DiscoverLayout({ stateContainer }: DiscoverLayoutProps) { ) : null} diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx index 96533247faddf..33cc6b7328073 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.test.tsx @@ -73,7 +73,6 @@ function getProps( return { stateContainer, savedQuery: '', - updateQuery: jest.fn(), onFieldEdited: jest.fn(), }; } diff --git a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx index 6222a909a4221..61acdd1875a14 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/discover_topnav.tsx @@ -7,7 +7,6 @@ */ import React, { useCallback, useEffect, useMemo, useRef } from 'react'; -import type { AggregateQuery, Query, TimeRange } from '@kbn/es-query'; import { type DataView, DataViewType } from '@kbn/data-views-plugin/public'; import { DataViewPickerProps } from '@kbn/unified-search-plugin/public'; import { ENABLE_ESQL } from '@kbn/esql-utils'; @@ -29,10 +28,6 @@ import { useDiscoverTopNav } from './use_discover_topnav'; export interface DiscoverTopNavProps { savedQuery?: string; - updateQuery: ( - payload: { dateRange: TimeRange; query?: Query | AggregateQuery }, - isUpdate?: boolean - ) => void; stateContainer: DiscoverStateContainer; textBasedLanguageModeErrors?: Error; textBasedLanguageModeWarning?: string; @@ -44,7 +39,6 @@ export interface DiscoverTopNavProps { export const DiscoverTopNav = ({ savedQuery, stateContainer, - updateQuery, textBasedLanguageModeErrors, textBasedLanguageModeWarning, onFieldEdited, @@ -241,7 +235,7 @@ export const DiscoverTopNav = ({ {...topNavProps} appName="discover" indexPatterns={[dataView]} - onQuerySubmit={updateQuery} + onQuerySubmit={stateContainer.actions.onUpdateQuery} onCancel={onCancelClick} isLoading={isLoading} onSavedQueryIdChange={updateSavedQueryId} diff --git a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx index 0e05b885af160..ce1592c1598d3 100644 --- a/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx +++ b/src/plugins/discover/public/application/main/components/top_nav/get_top_nav_links.tsx @@ -10,6 +10,7 @@ import { i18n } from '@kbn/i18n'; import type { DataView } from '@kbn/data-views-plugin/public'; import type { TopNavMenuData } from '@kbn/navigation-plugin/public'; import { setStateToKbnUrl } from '@kbn/kibana-utils-plugin/public'; +import { omit } from 'lodash'; import type { DiscoverAppLocatorParams } from '../../../../../common'; import { showOpenSearchPanel } from './show_open_search_panel'; import { getSharingData, showPublicUrlSwitch } from '../../../../utils/get_sharing_data'; @@ -138,7 +139,7 @@ export const getTopNavLinks = ({ // Share -> Get links -> Snapshot const params: DiscoverAppLocatorParams = { - ...appState, + ...omit(appState, 'dataSource'), ...(savedSearch.id ? { savedSearchId: savedSearch.id } : {}), ...(dataView?.isPersisted() ? { dataViewId: dataView?.id } diff --git a/src/plugins/discover/public/application/main/hooks/grid_customisations/index.ts b/src/plugins/discover/public/application/main/hooks/grid_customisations/index.ts new file mode 100644 index 0000000000000..301c96695de02 --- /dev/null +++ b/src/plugins/discover/public/application/main/hooks/grid_customisations/index.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { useMemo } from 'react'; +import { useDiscoverServices } from '../../../../hooks/use_discover_services'; +import { useDiscoverCustomization } from '../../../../customizations'; +import { getLogsVirtualColumnsConfiguration } from './logs'; + +export * from './logs'; + +export const useContextualGridCustomisations = () => { + const { data } = useDiscoverServices(); + // TODO / NOTE: This will eventually rely on Discover's context resolution to determine which fields + // are returned based on the data type. + const isLogsContext = useDiscoverCustomization('data_table')?.logsEnabled; + + const virtualColumnsConfiguration = useMemo(() => { + if (!isLogsContext) return null; + if (isLogsContext) return getLogsVirtualColumnsConfiguration(data); + }, [data, isLogsContext]); + + return virtualColumnsConfiguration; +}; diff --git a/src/plugins/discover/public/application/main/hooks/grid_customisations/logs.tsx b/src/plugins/discover/public/application/main/hooks/grid_customisations/logs.tsx new file mode 100644 index 0000000000000..ae5c51c265c5c --- /dev/null +++ b/src/plugins/discover/public/application/main/hooks/grid_customisations/logs.tsx @@ -0,0 +1,31 @@ +/* + * 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 { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import { CONTENT_FIELD, RESOURCE_FIELD } from '../../../../../common/data_types/logs/constants'; +import { renderCell } from '../../../../components/discover_grid/virtual_columns/logs/cell_renderer'; +import { renderColumn } from '../../../../components/discover_grid/virtual_columns/logs/column'; + +export const getLogsVirtualColumnsConfiguration = (data: DataPublicPluginStart) => { + return { + customCellRenderer: createCustomCellRenderer({ data }), + customGridColumnsConfiguration: createCustomGridColumnsConfiguration(), + }; +}; + +export const createCustomCellRenderer = ({ data }: { data: DataPublicPluginStart }) => { + return { + [CONTENT_FIELD]: renderCell(CONTENT_FIELD, { data }), + [RESOURCE_FIELD]: renderCell(RESOURCE_FIELD, { data }), + }; +}; + +export const createCustomGridColumnsConfiguration = () => ({ + [CONTENT_FIELD]: renderColumn(CONTENT_FIELD), + [RESOURCE_FIELD]: renderColumn(RESOURCE_FIELD), +}); diff --git a/src/plugins/discover/public/application/main/hooks/grid_customisations/use_virtual_column_services.tsx b/src/plugins/discover/public/application/main/hooks/grid_customisations/use_virtual_column_services.tsx new file mode 100644 index 0000000000000..386fc6586258d --- /dev/null +++ b/src/plugins/discover/public/application/main/hooks/grid_customisations/use_virtual_column_services.tsx @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import createContainer from 'constate'; +import type { DataView } from '@kbn/data-views-plugin/common'; +import { DataPublicPluginStart } from '@kbn/data-plugin/public'; + +export interface UseVirtualColumnServices { + services: { + data: DataPublicPluginStart; + dataView: DataView; + }; +} + +const useVirtualColumns = ({ services }: UseVirtualColumnServices) => services; + +export const [VirtualColumnServiceProvider, useVirtualColumnServiceContext] = + createContainer(useVirtualColumns); diff --git a/src/plugins/discover/public/application/main/hooks/sidebar/use_additional_field_groups.tsx b/src/plugins/discover/public/application/main/hooks/sidebar/use_additional_field_groups.tsx new file mode 100644 index 0000000000000..6f9ab0073904f --- /dev/null +++ b/src/plugins/discover/public/application/main/hooks/sidebar/use_additional_field_groups.tsx @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { DataViewField } from '@kbn/data-views-plugin/common'; +import { useDiscoverCustomization } from '../../../../customizations'; +import * as constants from '../../../../../common/data_types/logs/constants'; + +export const useAdditionalFieldGroups = () => { + // TODO / NOTE: This will eventually rely on Discover's context resolution to determine which fields + // are returned based on the data type. + const isLogsContext = useDiscoverCustomization('field_list')?.logsFieldsEnabled; + + if (isLogsContext) { + const smartFields = [ + new DataViewField({ + name: constants.RESOURCE_FIELD, + type: 'smart_field', + searchable: false, + aggregatable: false, + }), + new DataViewField({ + name: constants.CONTENT_FIELD, + type: 'smart_field', + searchable: false, + aggregatable: false, + }), + ]; + return { + smartFields, + }; + } +}; diff --git a/src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.tsx b/src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.tsx index c7d530360ca3e..8777b357714ba 100644 --- a/src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.tsx +++ b/src/plugins/discover/public/application/main/hooks/use_test_based_query_language.test.tsx @@ -269,13 +269,7 @@ describe('useTextBasedQueryLanguage', () => { query: { esql: 'from the-data-view-title | keep field 1 | WHERE field1=1' }, }); - await waitFor(() => expect(replaceUrlState).toHaveBeenCalledTimes(1)); - await waitFor(() => { - expect(replaceUrlState).toHaveBeenCalledWith({ - columns: ['field1', 'field2'], - }); - }); - replaceUrlState.mockReset(); + expect(replaceUrlState).toHaveBeenCalledTimes(0); documents$.next({ recordRawType: RecordRawType.PLAIN, diff --git a/src/plugins/discover/public/application/main/hooks/use_text_based_query_language.ts b/src/plugins/discover/public/application/main/hooks/use_text_based_query_language.ts index 0a5b7c021046f..063a5c21bfbe3 100644 --- a/src/plugins/discover/public/application/main/hooks/use_text_based_query_language.ts +++ b/src/plugins/discover/public/application/main/hooks/use_text_based_query_language.ts @@ -64,7 +64,7 @@ export function useTextBasedQueryLanguage({ fetchStatus: FetchStatus.COMPLETE, }); }; - const { index, viewMode } = stateContainer.appState.getState(); + const { viewMode } = stateContainer.appState.getState(); let nextColumns: string[] = []; const isTextBasedQueryLang = recordRawType === 'plain' && isOfAggregateQueryType(query); const hasResults = Boolean(next.result?.length); @@ -83,7 +83,6 @@ export function useTextBasedQueryLanguage({ if (next.fetchStatus !== FetchStatus.PARTIAL) { return; } - const dataViewObj = stateContainer.internalState.getState().dataView; if (hasResults) { // check if state needs to contain column transformation due to a different columns in the resultset @@ -94,22 +93,16 @@ export function useTextBasedQueryLanguage({ initialFetch.current = false; } else { nextColumns = firstRowColumns; - if ( - initialFetch.current && - !prev.current.columns.length && - Boolean(dataViewObj?.id === index) - ) { + if (initialFetch.current && !prev.current.columns.length) { prev.current.columns = firstRowColumns; } } } const addColumnsToState = !isEqual(nextColumns, prev.current.columns); const queryChanged = query[language] !== prev.current.query; - // no need to reset index to state if it hasn't changed - const addDataViewToState = index !== undefined; const changeViewMode = viewMode !== getValidViewMode({ viewMode, isTextBasedQueryMode: true }); - if (!queryChanged || (!addDataViewToState && !addColumnsToState && !changeViewMode)) { + if (!queryChanged || (!addColumnsToState && !changeViewMode)) { sendComplete(); return; } @@ -119,9 +112,8 @@ export function useTextBasedQueryLanguage({ prev.current.columns = nextColumns; } // just change URL state if necessary - if (addDataViewToState || addColumnsToState || changeViewMode) { + if (addColumnsToState || changeViewMode) { const nextState = { - ...(addDataViewToState && { index: undefined }), ...(addColumnsToState && { columns: nextColumns }), ...(changeViewMode && { viewMode: undefined }), }; diff --git a/src/plugins/discover/public/application/main/state_management/discover_app_state_container.test.ts b/src/plugins/discover/public/application/main/state_management/discover_app_state_container.test.ts index 0ddc8c47c2767..75ae6208be871 100644 --- a/src/plugins/discover/public/application/main/state_management/discover_app_state_container.test.ts +++ b/src/plugins/discover/public/application/main/state_management/discover_app_state_container.test.ts @@ -19,6 +19,7 @@ import { isEqualState, } from './discover_app_state_container'; import { SavedSearch, VIEW_MODE } from '@kbn/saved-search-plugin/common'; +import { createDataViewDataSource } from '../../../../common/data_sources'; let history: History; let state: DiscoverAppStateContainer; @@ -40,16 +41,22 @@ describe('Test discover app state container', () => { }); test('hasChanged returns whether the current state has changed', async () => { - state.set({ index: 'modified' }); + state.set({ + dataSource: createDataViewDataSource({ dataViewId: 'modified' }), + }); expect(state.hasChanged()).toBeTruthy(); state.resetInitialState(); expect(state.hasChanged()).toBeFalsy(); }); test('getPrevious returns the state before the current', async () => { - state.set({ index: 'first' }); + state.set({ + dataSource: createDataViewDataSource({ dataViewId: 'first' }), + }); const stateA = state.getState(); - state.set({ index: 'second' }); + state.set({ + dataSource: createDataViewDataSource({ dataViewId: 'second' }), + }); expect(state.getPrevious()).toEqual(stateA); }); @@ -111,7 +118,7 @@ describe('Test discover app state container', () => { filters: [customFilter], grid: undefined, hideChart: true, - index: 'the-data-view-id', + dataSource: createDataViewDataSource({ dataViewId: 'the-data-view-id' }), interval: 'auto', query: customQuery, rowHeight: undefined, @@ -147,7 +154,7 @@ describe('Test discover app state container', () => { filters: [customFilter], grid: undefined, hideChart: undefined, - index: 'the-data-view-id', + dataSource: createDataViewDataSource({ dataViewId: 'the-data-view-id' }), interval: 'auto', query: defaultQuery, rowHeight: undefined, @@ -217,10 +224,24 @@ describe('Test discover app state container', () => { expect(isEqualState(initialState, { ...initialState, ...param })).toBeFalsy(); }); }); + test('allows to exclude variables from comparison', () => { expect( - isEqualState(initialState, { ...initialState, index: undefined }, ['index']) + isEqualState(initialState, { ...initialState, dataSource: undefined }, ['dataSource']) ).toBeTruthy(); }); }); + + test('should automatically set ES|QL data source when query is ES|QL', () => { + state.update({ + dataSource: createDataViewDataSource({ dataViewId: 'test' }), + }); + expect(state.get().dataSource?.type).toBe('dataView'); + state.update({ + query: { + esql: 'from test', + }, + }); + expect(state.get().dataSource?.type).toBe('esql'); + }); }); diff --git a/src/plugins/discover/public/application/main/state_management/discover_app_state_container.ts b/src/plugins/discover/public/application/main/state_management/discover_app_state_container.ts index ec5d2dc4e8437..5ec9ca4d7215c 100644 --- a/src/plugins/discover/public/application/main/state_management/discover_app_state_container.ts +++ b/src/plugins/discover/public/application/main/state_management/discover_app_state_container.ts @@ -19,6 +19,7 @@ import { FilterCompareOptions, FilterStateStore, Query, + isOfAggregateQueryType, } from '@kbn/es-query'; import { SavedSearch, VIEW_MODE } from '@kbn/saved-search-plugin/public'; import { IKbnUrlStateStorage, ISyncStateRef, syncState } from '@kbn/kibana-utils-plugin/public'; @@ -30,6 +31,13 @@ import { addLog } from '../../../utils/add_log'; import { cleanupUrlState } from './utils/cleanup_url_state'; import { getStateDefaults } from './utils/get_state_defaults'; import { handleSourceColumnState } from '../../../utils/state_helpers'; +import { + createDataViewDataSource, + createEsqlDataSource, + DataSourceType, + DiscoverDataSource, + isDataSourceType, +} from '../../../../common/data_sources'; export const APP_STATE_URL_KEY = '_a'; export interface DiscoverAppStateContainer extends ReduxLikeStateContainer { @@ -100,9 +108,9 @@ export interface DiscoverAppState { */ hideChart?: boolean; /** - * id of the used data view + * The current data source */ - index?: string; + dataSource?: DiscoverDataSource; /** * Used interval of the histogram */ @@ -174,15 +182,23 @@ export const getDiscoverAppStateContainer = ({ const enhancedAppContainer = { ...appStateContainer, set: (value: DiscoverAppState | null) => { - if (value) { - previousState = appStateContainer.getState(); - appStateContainer.set(value); + if (!value) { + return; + } + + previousState = appStateContainer.getState(); + + // When updating to an ES|QL query, sync the data source + if (isOfAggregateQueryType(value.query)) { + value.dataSource = createEsqlDataSource(); } + + appStateContainer.set(value); }, }; const hasChanged = () => { - return !isEqualState(initialState, appStateContainer.getState()); + return !isEqualState(initialState, enhancedAppContainer.getState()); }; const getAppStateFromSavedSearch = (newSavedSearch: SavedSearch) => { @@ -195,17 +211,17 @@ export const getDiscoverAppStateContainer = ({ const resetToState = (state: DiscoverAppState) => { addLog('[appState] reset state to', state); previousState = state; - appStateContainer.set(state); + enhancedAppContainer.set(state); }; const resetInitialState = () => { addLog('[appState] reset initial state to the current state'); - initialState = appStateContainer.getState(); + initialState = enhancedAppContainer.getState(); }; const replaceUrlState = async (newPartial: DiscoverAppState = {}, merge = true) => { addLog('[appState] replaceUrlState', { newPartial, merge }); - const state = merge ? { ...appStateContainer.getState(), ...newPartial } : newPartial; + const state = merge ? { ...enhancedAppContainer.getState(), ...newPartial } : newPartial; await stateStorage.set(APP_STATE_URL_KEY, state, { replace: true }); }; @@ -220,17 +236,28 @@ export const getDiscoverAppStateContainer = ({ const initializeAndSync = (currentSavedSearch: SavedSearch) => { addLog('[appState] initialize state and sync with URL', currentSavedSearch); + const { data } = services; - const dataView = currentSavedSearch.searchSource.getField('index'); + const savedSearchDataView = currentSavedSearch.searchSource.getField('index'); + const appState = enhancedAppContainer.getState(); + const setDataViewFromSavedSearch = + !appState.dataSource || + (isDataSourceType(appState.dataSource, DataSourceType.DataView) && + appState.dataSource.dataViewId !== savedSearchDataView?.id); - if (appStateContainer.getState().index !== dataView?.id) { + if (setDataViewFromSavedSearch) { // used data view is different from the given by url/state which is invalid - setState(appStateContainer, { index: dataView?.id }); + setState(enhancedAppContainer, { + dataSource: savedSearchDataView?.id + ? createDataViewDataSource({ dataViewId: savedSearchDataView.id }) + : undefined, + }); } + // syncs `_a` portion of url with query services const stopSyncingQueryAppStateWithStateContainer = connectToQueryState( data.query, - appStateContainer, + enhancedAppContainer, { filters: FilterStateStore.APP_STATE, query: true, @@ -244,6 +271,7 @@ export const getDiscoverAppStateContainer = ({ ); const { start, stop } = startAppStateUrlSync(); + // current state need to be pushed to url replaceUrlState({}).then(() => start()); @@ -259,8 +287,8 @@ export const getDiscoverAppStateContainer = ({ if (replace) { return replaceUrlState(newPartial); } else { - previousState = { ...appStateContainer.getState() }; - setState(appStateContainer, newPartial); + previousState = { ...enhancedAppContainer.getState() }; + setState(enhancedAppContainer, newPartial); } }; @@ -291,6 +319,10 @@ export interface AppStateUrl extends Omit { * Necessary to take care of legacy links [fieldName,direction] */ sort?: string[][] | [string, string]; + /** + * Legacy data view ID prop + */ + index?: string; } export function getInitialState( @@ -298,17 +330,17 @@ export function getInitialState( savedSearch: SavedSearch, services: DiscoverServices ) { - const stateStorageURL = stateStorage?.get(APP_STATE_URL_KEY) as AppStateUrl; + const appStateFromUrl = stateStorage?.get(APP_STATE_URL_KEY); const defaultAppState = getStateDefaults({ savedSearch, services, }); return handleSourceColumnState( - stateStorageURL === null + appStateFromUrl == null ? defaultAppState : { ...defaultAppState, - ...cleanupUrlState(stateStorageURL, services.uiSettings), + ...cleanupUrlState(appStateFromUrl, services.uiSettings), }, services.uiSettings ); @@ -353,7 +385,7 @@ export function isEqualFilters( export function isEqualState( stateA: DiscoverAppState, stateB: DiscoverAppState, - exclude: string[] = [] + exclude: Array = [] ) { if (!stateA && !stateB) { return true; @@ -361,8 +393,8 @@ export function isEqualState( return false; } - const { filters: stateAFilters = [], ...stateAPartial } = omit(stateA, exclude); - const { filters: stateBFilters = [], ...stateBPartial } = omit(stateB, exclude); + const { filters: stateAFilters = [], ...stateAPartial } = omit(stateA, exclude as string[]); + const { filters: stateBFilters = [], ...stateBPartial } = omit(stateB, exclude as string[]); return isEqual(stateAPartial, stateBPartial) && isEqualFilters(stateAFilters, stateBFilters); } diff --git a/src/plugins/discover/public/application/main/state_management/discover_state.test.ts b/src/plugins/discover/public/application/main/state_management/discover_state.test.ts index 39aa114673cbb..db8666cf72751 100644 --- a/src/plugins/discover/public/application/main/state_management/discover_state.test.ts +++ b/src/plugins/discover/public/application/main/state_management/discover_state.test.ts @@ -30,6 +30,7 @@ import { dataViewAdHoc, dataViewComplexMock } from '../../../__mocks__/data_view import { copySavedSearch } from './discover_saved_search_container'; import { createKbnUrlStateStorage, IKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; import { mockCustomizationContext } from '../../../customizations/__mocks__/customization_context'; +import { createDataViewDataSource, createEsqlDataSource } from '../../../../common/data_sources'; const startSync = (appState: DiscoverAppStateContainer) => { const { start, stop } = appState.syncState(); @@ -102,40 +103,51 @@ describe('Test discover state', () => { stopSync = () => {}; }); test('setting app state and syncing to URL', async () => { - state.appState.update({ index: 'modified' }); + state.appState.update({ + dataSource: createDataViewDataSource({ dataViewId: 'modified' }), + }); await new Promise(process.nextTick); expect(getCurrentUrl()).toMatchInlineSnapshot( - `"/#?_a=(columns:!(default_column),index:modified,interval:auto,sort:!())"` + `"/#?_a=(columns:!(default_column),dataSource:(dataViewId:modified,type:dataView),interval:auto,sort:!())"` ); }); test('changing URL to be propagated to appState', async () => { - history.push('/#?_a=(index:modified)'); + history.push('/#?_a=(dataSource:(dataViewId:modified,type:dataView))'); expect(state.appState.getState()).toMatchInlineSnapshot(` Object { - "index": "modified", + "dataSource": Object { + "dataViewId": "modified", + "type": "dataView", + }, } `); }); test('URL navigation to url without _a, state should not change', async () => { - history.push('/#?_a=(index:modified)'); + history.push('/#?_a=(dataSource:(dataViewId:modified,type:dataView))'); history.push('/'); expect(state.appState.getState()).toEqual({ - index: 'modified', + dataSource: createDataViewDataSource({ dataViewId: 'modified' }), }); }); test('isAppStateDirty returns whether the current state has changed', async () => { - state.appState.update({ index: 'modified' }); + state.appState.update({ + dataSource: createDataViewDataSource({ dataViewId: 'modified' }), + }); expect(state.appState.hasChanged()).toBeTruthy(); state.appState.resetInitialState(); expect(state.appState.hasChanged()).toBeFalsy(); }); test('getPreviousAppState returns the state before the current', async () => { - state.appState.update({ index: 'first' }); + state.appState.update({ + dataSource: createDataViewDataSource({ dataViewId: 'first' }), + }); const stateA = state.appState.getState(); - state.appState.update({ index: 'second' }); + state.appState.update({ + dataSource: createDataViewDataSource({ dataViewId: 'second' }), + }); expect(state.appState.getPrevious()).toEqual(stateA); }); @@ -189,23 +201,28 @@ describe('Test discover state with overridden state storage', () => { }); test('setting app state and syncing to URL', async () => { - state.appState.update({ index: 'modified' }); + state.appState.update({ + dataSource: createDataViewDataSource({ dataViewId: 'modified' }), + }); await jest.runAllTimersAsync(); expect(history.createHref(history.location)).toMatchInlineSnapshot( - `"/#?_a=(columns:!(default_column),index:modified,interval:auto,sort:!())"` + `"/#?_a=(columns:!(default_column),dataSource:(dataViewId:modified,type:dataView),interval:auto,sort:!())"` ); }); test('changing URL to be propagated to appState', async () => { - history.push('/#?_a=(index:modified)'); + history.push('/#?_a=(dataSource:(dataViewId:modified,type:dataView))'); await jest.runAllTimersAsync(); expect(state.appState.getState()).toMatchInlineSnapshot(` Object { - "index": "modified", + "dataSource": Object { + "dataViewId": "modified", + "type": "dataView", + }, } `); }); @@ -263,7 +280,9 @@ describe('Test createSearchSessionRestorationDataProvider', () => { customizationContext: mockCustomizationContext, }); discoverStateContainer.appState.update({ - index: savedSearchMock.searchSource.getField('index')!.id, + dataSource: createDataViewDataSource({ + dataViewId: savedSearchMock.searchSource.getField('index')!.id!, + }), }); const searchSessionInfoProvider = createSearchSessionRestorationDataProvider({ data: mockDataPlugin, @@ -428,7 +447,7 @@ describe('Test discover state actions', () => { const unsubscribe = state.actions.initializeAndSync(); await new Promise(process.nextTick); expect(getCurrentUrl()).toMatchInlineSnapshot( - `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),index:the-data-view-id,interval:auto,sort:!())"` + `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),dataSource:(dataViewId:the-data-view-id,type:dataView),interval:auto,sort:!())"` ); expect(state.savedSearchState.getHasChanged$().getValue()).toBe(false); const { searchSource, ...savedSearch } = state.savedSearchState.getState(); @@ -461,7 +480,7 @@ describe('Test discover state actions', () => { const unsubscribe = state.actions.initializeAndSync(); await new Promise(process.nextTick); expect(getCurrentUrl()).toMatchInlineSnapshot( - `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),index:the-data-view-id,interval:auto,sort:!())"` + `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),dataSource:(dataViewId:the-data-view-id,type:dataView),interval:auto,sort:!())"` ); expect(state.savedSearchState.getHasChanged$().getValue()).toBe(false); unsubscribe(); @@ -476,7 +495,7 @@ describe('Test discover state actions', () => { const unsubscribe = state.actions.initializeAndSync(); await new Promise(process.nextTick); expect(getCurrentUrl()).toMatchInlineSnapshot( - `"/#?_a=(columns:!(bytes),index:the-data-view-id,interval:month,sort:!())&_g=()"` + `"/#?_a=(columns:!(bytes),dataSource:(dataViewId:the-data-view-id,type:dataView),interval:month,sort:!())&_g=()"` ); expect(state.savedSearchState.getHasChanged$().getValue()).toBe(true); unsubscribe(); @@ -491,7 +510,7 @@ describe('Test discover state actions', () => { const unsubscribe = state.actions.initializeAndSync(); await new Promise(process.nextTick); expect(getCurrentUrl()).toMatchInlineSnapshot( - `"/#?_a=(columns:!(bytes),index:the-data-view-id,interval:month,sort:!())&_g=()"` + `"/#?_a=(columns:!(bytes),dataSource:(dataViewId:the-data-view-id,type:dataView),interval:month,sort:!())&_g=()"` ); expect(state.savedSearchState.getHasChanged$().getValue()).toBe(true); unsubscribe(); @@ -505,7 +524,7 @@ describe('Test discover state actions', () => { await new Promise(process.nextTick); expect(newSavedSearch?.id).toBe('the-saved-search-id'); expect(getCurrentUrl()).toMatchInlineSnapshot( - `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),index:the-data-view-id,interval:auto,sort:!())"` + `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),dataSource:(dataViewId:the-data-view-id,type:dataView),interval:auto,sort:!())"` ); expect(state.savedSearchState.getHasChanged$().getValue()).toBe(false); unsubscribe(); @@ -520,7 +539,7 @@ describe('Test discover state actions', () => { const unsubscribe = state.actions.initializeAndSync(); await new Promise(process.nextTick); expect(getCurrentUrl()).toMatchInlineSnapshot( - `"/#?_a=(columns:!(message),index:the-data-view-id,interval:month,sort:!())&_g=()"` + `"/#?_a=(columns:!(message),dataSource:(dataViewId:the-data-view-id,type:dataView),interval:month,sort:!())&_g=()"` ); expect(state.savedSearchState.getHasChanged$().getValue()).toBe(true); unsubscribe(); @@ -600,7 +619,7 @@ describe('Test discover state actions', () => { }); test('loadSavedSearch without id ignoring invalid index in URL, adding a warning toast', async () => { - const url = '/#?_a=(index:abc)&_g=()'; + const url = '/#?_a=(dataSource:(dataViewId:abc,type:dataView))&_g=()'; const { state } = await getState(url, { savedSearch: savedSearchMock, isEmptyUrl: false }); await state.actions.loadSavedSearch(); expect(state.savedSearchState.getState().searchSource.getField('index')?.id).toBe( @@ -614,14 +633,16 @@ describe('Test discover state actions', () => { }); test('loadSavedSearch without id containing ES|QL, adding no warning toast with an invalid index', async () => { - const url = "/#?_a=(index:abcde,query:(esql:'FROM test'))&_g=()"; + const url = + "/#?_a=(dataSource:(dataViewId:abcde,type:dataView),query:(esql:'FROM test'))&_g=()"; const { state } = await getState(url, { savedSearch: savedSearchMock, isEmptyUrl: false }); await state.actions.loadSavedSearch(); + expect(state.appState.getState().dataSource).toEqual(createEsqlDataSource()); expect(discoverServiceMock.toastNotifications.addWarning).not.toHaveBeenCalled(); }); test('loadSavedSearch with id ignoring invalid index in URL, adding a warning toast', async () => { - const url = '/#?_a=(index:abc)&_g=()'; + const url = '/#?_a=(dataSource:(dataViewId:abc,type:dataView))&_g=()'; const { state } = await getState(url, { savedSearch: savedSearchMock, isEmptyUrl: false }); await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id }); expect(state.savedSearchState.getState().searchSource.getField('index')?.id).toBe( @@ -644,7 +665,9 @@ describe('Test discover state actions', () => { state.savedSearchState.load = jest.fn().mockReturnValue(savedSearchMockWithTimeField); // unsetting the previous index else this is considered as update to the persisted saved search - state.appState.set({ index: undefined }); + state.appState.set({ + dataSource: undefined, + }); await state.actions.loadSavedSearch({ savedSearchId: 'the-saved-search-id-with-timefield' }); expect(state.savedSearchState.getState().searchSource.getField('index')?.id).toBe( 'index-pattern-with-timefield-id' @@ -711,14 +734,16 @@ describe('Test discover state actions', () => { const adHocDataViewId = savedSearchAdHoc.searchSource.getField('index')!.id; const { state } = await getState('/', { savedSearch: savedSearchAdHocCopy }); await state.actions.loadSavedSearch({ savedSearchId: savedSearchAdHoc.id }); - expect(state.appState.getState().index).toBe(adHocDataViewId); + expect(state.appState.getState().dataSource).toEqual( + createDataViewDataSource({ dataViewId: adHocDataViewId! }) + ); expect(state.internalState.getState().adHocDataViews[0].id).toBe(adHocDataViewId); }); test('loadSavedSearch with ES|QL, data view index is not overwritten by URL ', async () => { const savedSearchMockWithESQLCopy = copySavedSearch(savedSearchMockWithESQL); const persistedDataViewId = savedSearchMockWithESQLCopy?.searchSource.getField('index')!.id; - const url = "/#?_a=(index:'the-data-view-id')&_g=()"; + const url = "/#?_a=(dataSource:(dataViewId:'the-data-view-id',type:dataView))&_g=()"; const { state } = await getState(url, { savedSearch: savedSearchMockWithESQLCopy, isEmptyUrl: false, @@ -731,7 +756,7 @@ describe('Test discover state actions', () => { test('onChangeDataView', async () => { const { state, getCurrentUrl } = await getState('/', { savedSearch: savedSearchMock }); - const { actions, savedSearchState, dataState, appState } = state; + const { actions, savedSearchState, dataState } = state; await actions.loadSavedSearch({ savedSearchId: savedSearchMock.id }); const unsubscribe = actions.initializeAndSync(); @@ -747,7 +772,9 @@ describe('Test discover state actions', () => { // test changed state, fetch should be called once and URL should be updated expect(dataState.fetch).toHaveBeenCalledTimes(1); - expect(appState.get().index).toBe(dataViewComplexMock.id); + expect(state.appState.getState().dataSource).toEqual( + createDataViewDataSource({ dataViewId: dataViewComplexMock.id! }) + ); expect(savedSearchState.getState().searchSource.getField('index')!.id).toBe( dataViewComplexMock.id ); @@ -763,7 +790,9 @@ describe('Test discover state actions', () => { await waitFor(() => { expect(state.internalState.getState().dataView?.id).toBe(dataViewComplexMock.id); }); - expect(state.appState.get().index).toBe(dataViewComplexMock.id); + expect(state.appState.getState().dataSource).toEqual( + createDataViewDataSource({ dataViewId: dataViewComplexMock.id! }) + ); expect(state.savedSearchState.getState().searchSource.getField('index')!.id).toBe( dataViewComplexMock.id ); @@ -777,7 +806,9 @@ describe('Test discover state actions', () => { await waitFor(() => { expect(state.internalState.getState().dataView?.id).toBe(dataViewAdHoc.id); }); - expect(state.appState.get().index).toBe(dataViewAdHoc.id); + expect(state.appState.getState().dataSource).toEqual( + createDataViewDataSource({ dataViewId: dataViewAdHoc.id! }) + ); expect(state.savedSearchState.getState().searchSource.getField('index')!.id).toBe( dataViewAdHoc.id ); @@ -838,7 +869,9 @@ describe('Test discover state actions', () => { await state.actions.loadSavedSearch({ savedSearchId: savedSearchMock.id }); const unsubscribe = state.actions.initializeAndSync(); await state.actions.createAndAppendAdHocDataView({ title: 'ad-hoc-test' }); - expect(state.appState.getState().index).toBe('ad-hoc-id'); + expect(state.appState.getState().dataSource).toEqual( + createDataViewDataSource({ dataViewId: 'ad-hoc-id' }) + ); expect(state.internalState.getState().adHocDataViews[0].id).toBe('ad-hoc-id'); unsubscribe(); }); @@ -849,7 +882,7 @@ describe('Test discover state actions', () => { const unsubscribe = state.actions.initializeAndSync(); await new Promise(process.nextTick); const initialUrlState = - '/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),index:the-data-view-id,interval:auto,sort:!())'; + '/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(default_column),dataSource:(dataViewId:the-data-view-id,type:dataView),interval:auto,sort:!())'; expect(getCurrentUrl()).toBe(initialUrlState); expect(state.internalState.getState().dataView?.id).toBe(dataViewMock.id!); @@ -857,7 +890,7 @@ describe('Test discover state actions', () => { await state.actions.onChangeDataView(dataViewComplexMock.id!); await new Promise(process.nextTick); expect(getCurrentUrl()).toMatchInlineSnapshot( - `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(),index:data-view-with-various-field-types-id,interval:auto,sort:!(!(data,desc)))"` + `"/#?_g=(refreshInterval:(pause:!t,value:1000),time:(from:now-15d,to:now))&_a=(columns:!(),dataSource:(dataViewId:data-view-with-various-field-types-id,type:dataView),interval:auto,sort:!(!(data,desc)))"` ); await waitFor(() => { expect(state.dataState.fetch).toHaveBeenCalledTimes(1); @@ -925,18 +958,20 @@ describe('Test discover state with embedded mode', () => { }); test('setting app state and syncing to URL', async () => { - state.appState.update({ index: 'modified' }); + state.appState.update({ + dataSource: createDataViewDataSource({ dataViewId: 'modified' }), + }); await new Promise(process.nextTick); expect(getCurrentUrl()).toMatchInlineSnapshot( - `"/?_a=(columns:!(default_column),index:modified,interval:auto,sort:!())"` + `"/?_a=(columns:!(default_column),dataSource:(dataViewId:modified,type:dataView),interval:auto,sort:!())"` ); }); test('changing URL to be propagated to appState', async () => { - history.push('/?_a=(index:modified)'); + history.push('/?_a=(dataSource:(dataViewId:modified,type:dataView))'); expect(state.appState.getState()).toMatchObject( expect.objectContaining({ - index: 'modified', + dataSource: createDataViewDataSource({ dataViewId: 'modified' }), }) ); }); diff --git a/src/plugins/discover/public/application/main/state_management/discover_state.ts b/src/plugins/discover/public/application/main/state_management/discover_state.ts index 4816ac585c142..169e596a2cf93 100644 --- a/src/plugins/discover/public/application/main/state_management/discover_state.ts +++ b/src/plugins/discover/public/application/main/state_management/discover_state.ts @@ -54,6 +54,11 @@ import { DiscoverGlobalStateContainer, } from './discover_global_state_container'; import type { DiscoverCustomizationContext } from '../../../customizations'; +import { + createDataViewDataSource, + DataSourceType, + isDataSourceType, +} from '../../../../common/data_sources'; export interface DiscoverStateContainerParams { /** @@ -303,21 +308,34 @@ export function getDiscoverStateContainer({ const updateAdHocDataViewId = async () => { const prevDataView = internalStateContainer.getState().dataView; if (!prevDataView || prevDataView.isPersisted()) return; - const newDataView = await services.dataViews.create({ ...prevDataView.toSpec(), id: uuidv4() }); + + const nextDataView = await services.dataViews.create({ + ...prevDataView.toSpec(), + id: uuidv4(), + }); + services.dataViews.clearInstanceCache(prevDataView.id); updateFiltersReferences({ prevDataView, - nextDataView: newDataView, + nextDataView, services, }); - internalStateContainer.transitions.replaceAdHocDataViewWithId(prevDataView.id!, newDataView); - await appStateContainer.replaceUrlState({ index: newDataView.id }); - const trackingEnabled = Boolean(newDataView.isPersisted() || savedSearchContainer.getId()); + internalStateContainer.transitions.replaceAdHocDataViewWithId(prevDataView.id!, nextDataView); + + if (isDataSourceType(appStateContainer.get().dataSource, DataSourceType.DataView)) { + await appStateContainer.replaceUrlState({ + dataSource: nextDataView.id + ? createDataViewDataSource({ dataViewId: nextDataView.id }) + : undefined, + }); + } + + const trackingEnabled = Boolean(nextDataView.isPersisted() || savedSearchContainer.getId()); services.urlTracker.setTrackingEnabled(trackingEnabled); - return newDataView; + return nextDataView; }; const onOpenSavedSearch = async (newSavedSearchId: string) => { @@ -583,7 +601,7 @@ function createUrlGeneratorState({ const dataView = getSavedSearch().searchSource.getField('index'); return { filters: data.query.filterManager.getFilters(), - dataViewId: appState.index, + dataViewId: dataView?.id, query: appState.query, savedSearchId: getSavedSearch().id, timeRange: shouldRestoreSearchSession diff --git a/src/plugins/discover/public/application/main/state_management/utils/build_state_subscribe.test.ts b/src/plugins/discover/public/application/main/state_management/utils/build_state_subscribe.test.ts index 563473c274322..1a487c5bb3bcb 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/build_state_subscribe.test.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/build_state_subscribe.test.ts @@ -11,6 +11,7 @@ import { FetchStatus } from '../../../types'; import { dataViewComplexMock } from '../../../../__mocks__/data_view_complex'; import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock'; import { discoverServiceMock } from '../../../../__mocks__/services'; +import { createDataViewDataSource } from '../../../../../common/data_sources'; describe('buildStateSubscribe', () => { const savedSearch = savedSearchMock; @@ -35,7 +36,9 @@ describe('buildStateSubscribe', () => { }); it('should set the data view if the index has changed, and refetch should be triggered', async () => { - await getSubscribeFn()({ index: dataViewComplexMock.id }); + await getSubscribeFn()({ + dataSource: createDataViewDataSource({ dataViewId: dataViewComplexMock.id! }), + }); expect(stateContainer.actions.setDataView).toHaveBeenCalledWith(dataViewComplexMock); expect(stateContainer.dataState.reset).toHaveBeenCalled(); @@ -75,18 +78,26 @@ describe('buildStateSubscribe', () => { it('should not execute setState function if initialFetchStatus is UNINITIALIZED', async () => { const stateSubscribeFn = getSubscribeFn(); stateContainer.dataState.getInitialFetchStatus = jest.fn(() => FetchStatus.UNINITIALIZED); - await stateSubscribeFn({ index: dataViewComplexMock.id }); + await stateSubscribeFn({ + dataSource: createDataViewDataSource({ dataViewId: dataViewComplexMock.id! }), + }); expect(stateContainer.dataState.reset).toHaveBeenCalled(); }); it('should not execute setState twice if the identical data view change is propagated twice', async () => { - await getSubscribeFn()({ index: dataViewComplexMock.id }); + await getSubscribeFn()({ + dataSource: createDataViewDataSource({ dataViewId: dataViewComplexMock.id! }), + }); expect(stateContainer.dataState.reset).toBeCalledTimes(1); - stateContainer.appState.getPrevious = jest.fn(() => ({ index: dataViewComplexMock.id })); + stateContainer.appState.getPrevious = jest.fn(() => ({ + dataSource: createDataViewDataSource({ dataViewId: dataViewComplexMock.id! }), + })); - await getSubscribeFn()({ index: dataViewComplexMock.id }); + await getSubscribeFn()({ + dataSource: createDataViewDataSource({ dataViewId: dataViewComplexMock.id! }), + }); expect(stateContainer.dataState.reset).toBeCalledTimes(1); }); }); diff --git a/src/plugins/discover/public/application/main/state_management/utils/build_state_subscribe.ts b/src/plugins/discover/public/application/main/state_management/utils/build_state_subscribe.ts index 6cc9b88008931..fbd324a1a417c 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/build_state_subscribe.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/build_state_subscribe.ts @@ -20,6 +20,11 @@ import { addLog } from '../../../../utils/add_log'; import { isTextBasedQuery } from '../../utils/is_text_based_query'; import { FetchStatus } from '../../../types'; import { loadAndResolveDataView } from './resolve_data_view'; +import { + createDataViewDataSource, + DataSourceType, + isDataSourceType, +} from '../../../../../common/data_sources'; /** * Builds a subscribe function for the AppStateContainer, that is executed when the AppState changes in URL @@ -52,7 +57,7 @@ export const buildStateSubscribe = if ( isTextBasedQueryLang && - isEqualState(prevState, nextState, ['index', 'viewMode']) && + isEqualState(prevState, nextState, ['dataSource', 'viewMode']) && !queryChanged ) { // When there's a switch from data view to es|ql, this just leads to a cleanup of index and viewMode @@ -60,12 +65,13 @@ export const buildStateSubscribe = addLog('[appstate] subscribe update ignored for es|ql', { prevState, nextState }); return; } + if (isEqualState(prevState, nextState) && !queryChanged) { addLog('[appstate] subscribe update ignored due to no changes', { prevState, nextState }); return; } + addLog('[appstate] subscribe triggered', nextState); - const { hideChart, interval, breakdownField, sampleSize, sort, index } = prevState; if (isTextBasedQueryLang) { const isTextBasedQueryLangPrev = isTextBasedQuery(prevQuery); @@ -74,6 +80,8 @@ export const buildStateSubscribe = dataState.reset(savedSearch); } } + + const { hideChart, interval, breakdownField, sampleSize, sort, dataSource } = prevState; // Cast to boolean to avoid false positives when comparing // undefined and false, which would trigger a refetch const chartDisplayChanged = Boolean(nextState.hideChart) !== Boolean(hideChart); @@ -81,21 +89,36 @@ export const buildStateSubscribe = const breakdownFieldChanged = nextState.breakdownField !== breakdownField; const sampleSizeChanged = nextState.sampleSize !== sampleSize; const docTableSortChanged = !isEqual(nextState.sort, sort) && !isTextBasedQueryLang; - const dataViewChanged = !isEqual(nextState.index, index) && !isTextBasedQueryLang; + const dataSourceChanged = !isEqual(nextState.dataSource, dataSource) && !isTextBasedQueryLang; + let savedSearchDataView; + // NOTE: this is also called when navigating from discover app to context app - if (nextState.index && dataViewChanged) { + if (nextState.dataSource && dataSourceChanged) { + const dataViewId = isDataSourceType(nextState.dataSource, DataSourceType.DataView) + ? nextState.dataSource.dataViewId + : undefined; + const { dataView: nextDataView, fallback } = await loadAndResolveDataView( - { id: nextState.index, savedSearch, isTextBasedQuery: isTextBasedQuery(nextState?.query) }, + { id: dataViewId, savedSearch, isTextBasedQuery: isTextBasedQueryLang }, { internalStateContainer: internalState, services } ); // If the requested data view is not found, don't try to load it, // and instead reset the app state to the fallback data view if (fallback) { - appState.update({ index: nextDataView.id }, true); + appState.update( + { + dataSource: nextDataView.id + ? createDataViewDataSource({ dataViewId: nextDataView.id }) + : undefined, + }, + true + ); + return; } + savedSearch.searchSource.setField('index', nextDataView); dataState.reset(savedSearch); setDataView(nextDataView); @@ -104,7 +127,7 @@ export const buildStateSubscribe = savedSearchState.update({ nextDataView: savedSearchDataView, nextState }); - if (dataViewChanged && dataState.getInitialFetchStatus() === FetchStatus.UNINITIALIZED) { + if (dataSourceChanged && dataState.getInitialFetchStatus() === FetchStatus.UNINITIALIZED) { // stop execution if given data view has changed, and it's not configured to initially start a search in Discover return; } @@ -115,7 +138,7 @@ export const buildStateSubscribe = breakdownFieldChanged || sampleSizeChanged || docTableSortChanged || - dataViewChanged || + dataSourceChanged || queryChanged ) { const logData = { @@ -127,7 +150,7 @@ export const buildStateSubscribe = nextState.breakdownField ), docTableSortChanged: logEntry(docTableSortChanged, sort, nextState.sort), - dataViewChanged: logEntry(dataViewChanged, index, nextState.index), + dataSourceChanged: logEntry(dataSourceChanged, dataSource, nextState.dataSource), queryChanged: logEntry(queryChanged, prevQuery, nextQuery), }; diff --git a/src/plugins/discover/public/application/main/state_management/utils/change_data_view.test.ts b/src/plugins/discover/public/application/main/state_management/utils/change_data_view.test.ts index 62cca6a4199f8..4e486e588b8eb 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/change_data_view.test.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/change_data_view.test.ts @@ -17,6 +17,7 @@ import type { DataView } from '@kbn/data-views-plugin/common'; import { getDiscoverStateMock } from '../../../../__mocks__/discover_state.mock'; import { PureTransitionsToTransitions } from '@kbn/kibana-utils-plugin/common/state_containers'; import { InternalStateTransitions } from '../discover_internal_state_container'; +import { createDataViewDataSource } from '../../../../../common/data_sources'; const setupTestParams = (dataView: DataView | undefined) => { const savedSearch = savedSearchMock; @@ -44,7 +45,7 @@ describe('changeDataView', () => { await changeDataView(dataViewWithDefaultColumnMock.id!, params); expect(params.appState.update).toHaveBeenCalledWith({ columns: ['default_column'], // default_column would be added as dataViewWithDefaultColumn has it as a mapped field - index: 'data-view-with-user-default-column-id', + dataSource: createDataViewDataSource({ dataViewId: 'data-view-with-user-default-column-id' }), sort: [['@timestamp', 'desc']], }); expect(params.internalState.transitions.setIsDataViewLoading).toHaveBeenNthCalledWith(1, true); @@ -56,7 +57,7 @@ describe('changeDataView', () => { await changeDataView(dataViewComplexMock.id!, params); expect(params.appState.update).toHaveBeenCalledWith({ columns: [], // default_column would not be added as dataViewComplexMock does not have it as a mapped field - index: 'data-view-with-various-field-types-id', + dataSource: createDataViewDataSource({ dataViewId: 'data-view-with-various-field-types-id' }), sort: [['data', 'desc']], }); expect(params.internalState.transitions.setIsDataViewLoading).toHaveBeenNthCalledWith(1, true); diff --git a/src/plugins/discover/public/application/main/state_management/utils/cleanup_url_state.test.ts b/src/plugins/discover/public/application/main/state_management/utils/cleanup_url_state.test.ts index 46757b8fcffd8..bf5e30093dbbc 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/cleanup_url_state.test.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/cleanup_url_state.test.ts @@ -9,11 +9,12 @@ import { AppStateUrl } from '../discover_app_state_container'; import { cleanupUrlState } from './cleanup_url_state'; import { createDiscoverServicesMock } from '../../../../__mocks__/services'; +import { DataSourceType } from '../../../../../common/data_sources'; const services = createDiscoverServicesMock(); describe('cleanupUrlState', () => { - test('cleaning up legacy sort', async () => { + test('cleaning up legacy sort', () => { const state = { sort: ['batman', 'desc'] } as AppStateUrl; expect(cleanupUrlState(state, services.uiSettings)).toMatchInlineSnapshot(` Object { @@ -26,11 +27,13 @@ describe('cleanupUrlState', () => { } `); }); - test('not cleaning up broken legacy sort', async () => { + + test('not cleaning up broken legacy sort', () => { const state = { sort: ['batman'] } as unknown as AppStateUrl; expect(cleanupUrlState(state, services.uiSettings)).toMatchInlineSnapshot(`Object {}`); }); - test('not cleaning up regular sort', async () => { + + test('not cleaning up regular sort', () => { const state = { sort: [ ['batman', 'desc'], @@ -52,14 +55,15 @@ describe('cleanupUrlState', () => { } `); }); - test('removing empty sort', async () => { + + test('removing empty sort', () => { const state = { sort: [], } as AppStateUrl; expect(cleanupUrlState(state, services.uiSettings)).toMatchInlineSnapshot(`Object {}`); }); - test('should keep a valid rowsPerPage', async () => { + test('should keep a valid rowsPerPage', () => { const state = { rowsPerPage: 50, } as AppStateUrl; @@ -70,14 +74,14 @@ describe('cleanupUrlState', () => { `); }); - test('should remove a negative rowsPerPage', async () => { + test('should remove a negative rowsPerPage', () => { const state = { rowsPerPage: -50, } as AppStateUrl; expect(cleanupUrlState(state, services.uiSettings)).toMatchInlineSnapshot(`Object {}`); }); - test('should remove an invalid rowsPerPage', async () => { + test('should remove an invalid rowsPerPage', () => { const state = { rowsPerPage: 'test', } as unknown as AppStateUrl; @@ -85,7 +89,7 @@ describe('cleanupUrlState', () => { }); describe('sampleSize', function () { - test('should keep a valid sampleSize', async () => { + test('should keep a valid sampleSize', () => { const state = { sampleSize: 50, } as AppStateUrl; @@ -96,7 +100,7 @@ describe('cleanupUrlState', () => { `); }); - test('should remove for ES|QL', async () => { + test('should remove for ES|QL', () => { const state = { sampleSize: 50, query: { @@ -112,25 +116,78 @@ describe('cleanupUrlState', () => { `); }); - test('should remove a negative sampleSize', async () => { + test('should remove a negative sampleSize', () => { const state = { sampleSize: -50, } as AppStateUrl; expect(cleanupUrlState(state, services.uiSettings)).toMatchInlineSnapshot(`Object {}`); }); - test('should remove an invalid sampleSize', async () => { + test('should remove an invalid sampleSize', () => { const state = { sampleSize: 'test', } as unknown as AppStateUrl; expect(cleanupUrlState(state, services.uiSettings)).toMatchInlineSnapshot(`Object {}`); }); - test('should remove a too large sampleSize', async () => { + test('should remove a too large sampleSize', () => { const state = { sampleSize: 500000, } as AppStateUrl; expect(cleanupUrlState(state, services.uiSettings)).toMatchInlineSnapshot(`Object {}`); }); }); + + describe('index', () => { + it('should convert index to a data view dataSource', () => { + const state: AppStateUrl = { + index: 'test', + }; + expect(cleanupUrlState(state, services.uiSettings)).toMatchInlineSnapshot(` + Object { + "dataSource": Object { + "dataViewId": "test", + "type": "dataView", + }, + } + `); + }); + + it('should not override the dataSource if one is already set', () => { + const state: AppStateUrl = { + index: 'test', + dataSource: { + type: DataSourceType.DataView, + dataViewId: 'test2', + }, + }; + expect(cleanupUrlState(state, services.uiSettings)).toMatchInlineSnapshot(` + Object { + "dataSource": Object { + "dataViewId": "test2", + "type": "dataView", + }, + } + `); + }); + + it('should set an ES|QL dataSource if the query is an ES|QL query', () => { + const state: AppStateUrl = { + index: 'test', + query: { + esql: 'from test', + }, + }; + expect(cleanupUrlState(state, services.uiSettings)).toMatchInlineSnapshot(` + Object { + "dataSource": Object { + "type": "esql", + }, + "query": Object { + "esql": "from test", + }, + } + `); + }); + }); }); diff --git a/src/plugins/discover/public/application/main/state_management/utils/cleanup_url_state.ts b/src/plugins/discover/public/application/main/state_management/utils/cleanup_url_state.ts index 07b939c162f71..ebf5f8dc90bd3 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/cleanup_url_state.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/cleanup_url_state.ts @@ -10,6 +10,7 @@ import type { IUiSettingsClient } from '@kbn/core-ui-settings-browser'; import { DiscoverAppState, AppStateUrl } from '../discover_app_state_container'; import { migrateLegacyQuery } from '../../../../utils/migrate_legacy_query'; import { getMaxAllowedSampleSize } from '../../../../utils/get_allowed_sample_size'; +import { createDataViewDataSource, createEsqlDataSource } from '../../../../../common/data_sources'; /** * Takes care of the given url state, migrates legacy props and cleans up empty props @@ -20,7 +21,6 @@ export function cleanupUrlState( uiSettings: IUiSettingsClient ): DiscoverAppState { if ( - appStateFromUrl && appStateFromUrl.query && !isOfAggregateQueryType(appStateFromUrl.query) && !appStateFromUrl.query.language @@ -28,8 +28,8 @@ export function cleanupUrlState( appStateFromUrl.query = migrateLegacyQuery(appStateFromUrl.query); } - if (typeof appStateFromUrl?.sort?.[0] === 'string') { - if (appStateFromUrl?.sort?.[1] === 'asc' || appStateFromUrl.sort[1] === 'desc') { + if (typeof appStateFromUrl.sort?.[0] === 'string') { + if (appStateFromUrl.sort?.[1] === 'asc' || appStateFromUrl.sort[1] === 'desc') { // handling sort props like this[fieldName,direction] appStateFromUrl.sort = [[appStateFromUrl.sort[0], appStateFromUrl.sort[1]]]; } else { @@ -37,14 +37,14 @@ export function cleanupUrlState( } } - if (appStateFromUrl?.sort && !appStateFromUrl.sort.length) { + if (appStateFromUrl.sort && !appStateFromUrl.sort.length) { // If there's an empty array given in the URL, the sort prop should be removed // This allows the sort prop to be overwritten with the default sorting delete appStateFromUrl.sort; } if ( - appStateFromUrl?.rowsPerPage && + appStateFromUrl.rowsPerPage && !(typeof appStateFromUrl.rowsPerPage === 'number' && appStateFromUrl.rowsPerPage > 0) ) { // remove the param if it's invalid @@ -52,7 +52,7 @@ export function cleanupUrlState( } if ( - appStateFromUrl?.sampleSize && + appStateFromUrl.sampleSize && (isOfAggregateQueryType(appStateFromUrl.query) || // not supported yet for ES|QL !( typeof appStateFromUrl.sampleSize === 'number' && @@ -64,5 +64,16 @@ export function cleanupUrlState( delete appStateFromUrl.sampleSize; } + if (appStateFromUrl.index) { + if (!appStateFromUrl.dataSource) { + // Convert the provided index to a data source + appStateFromUrl.dataSource = isOfAggregateQueryType(appStateFromUrl.query) + ? createEsqlDataSource() + : createDataViewDataSource({ dataViewId: appStateFromUrl.index }); + } + + delete appStateFromUrl.index; + } + return appStateFromUrl as DiscoverAppState; } diff --git a/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.test.ts b/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.test.ts index 0a862b712186a..5e070ef099cde 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.test.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.test.ts @@ -13,6 +13,7 @@ import { dataViewWithTimefieldMock } from '../../../../__mocks__/data_view_with_ import { savedSearchMock, savedSearchMockWithESQL } from '../../../../__mocks__/saved_search'; import { dataViewMock } from '@kbn/discover-utils/src/__mocks__'; import { discoverServiceMock } from '../../../../__mocks__/services'; +import { createDataViewDataSource, createEsqlDataSource } from '../../../../../common/data_sources'; describe('getStateDefaults', () => { test('data view with timefield', () => { @@ -27,12 +28,15 @@ describe('getStateDefaults', () => { "columns": Array [ "default_column", ], + "dataSource": Object { + "dataViewId": "index-pattern-with-timefield-id", + "type": "dataView", + }, "filters": undefined, "grid": undefined, "headerRowHeight": undefined, "hideAggregatedPreview": undefined, "hideChart": undefined, - "index": "index-pattern-with-timefield-id", "interval": "auto", "query": undefined, "rowHeight": undefined, @@ -63,12 +67,15 @@ describe('getStateDefaults', () => { "columns": Array [ "default_column", ], + "dataSource": Object { + "dataViewId": "the-data-view-id", + "type": "dataView", + }, "filters": undefined, "grid": undefined, "headerRowHeight": undefined, "hideAggregatedPreview": undefined, "hideChart": undefined, - "index": "the-data-view-id", "interval": "auto", "query": undefined, "rowHeight": undefined, @@ -108,7 +115,7 @@ describe('getStateDefaults', () => { }, }); expect(actualForTextBasedWithValidViewMode.viewMode).toBe(VIEW_MODE.DOCUMENT_LEVEL); - expect(actualForTextBasedWithValidViewMode.index).toBe(undefined); + expect(actualForTextBasedWithValidViewMode.dataSource).toEqual(createEsqlDataSource()); const actualForWithValidViewMode = getStateDefaults({ services: discoverServiceMock, @@ -118,8 +125,32 @@ describe('getStateDefaults', () => { }, }); expect(actualForWithValidViewMode.viewMode).toBe(VIEW_MODE.AGGREGATED_LEVEL); - expect(actualForWithValidViewMode.index).toBe( - savedSearchMock.searchSource.getField('index')?.id + expect(actualForWithValidViewMode.dataSource).toEqual( + createDataViewDataSource({ + dataViewId: savedSearchMock.searchSource.getField('index')?.id!, + }) ); }); + + test('should return expected dataSource', () => { + const actualForTextBased = getStateDefaults({ + services: discoverServiceMock, + savedSearch: savedSearchMockWithESQL, + }); + expect(actualForTextBased.dataSource).toMatchInlineSnapshot(` + Object { + "type": "esql", + } + `); + const actualForDataView = getStateDefaults({ + services: discoverServiceMock, + savedSearch: savedSearchMock, + }); + expect(actualForDataView.dataSource).toMatchInlineSnapshot(` + Object { + "dataViewId": "the-data-view-id", + "type": "dataView", + } + `); + }); }); diff --git a/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.ts b/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.ts index 4faf8ffad2990..7a1f2734aa7c8 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/get_state_defaults.ts @@ -21,6 +21,11 @@ import { DiscoverServices } from '../../../../build_services'; import { getDefaultSort, getSortArray } from '../../../../utils/sorting'; import { isTextBasedQuery } from '../../utils/is_text_based_query'; import { getValidViewMode } from '../../utils/get_valid_view_mode'; +import { + createDataViewDataSource, + createEsqlDataSource, + DiscoverDataSource, +} from '../../../../../common/data_sources'; function getDefaultColumns(savedSearch: SavedSearch, uiSettings: IUiSettingsClient) { if (savedSearch.columns && savedSearch.columns.length > 0) { @@ -45,12 +50,16 @@ export function getStateDefaults({ const { searchSource } = savedSearch; const { data, uiSettings, storage } = services; const dataView = searchSource.getField('index'); - const query = searchSource.getField('query') || data.query.queryString.getDefaultQuery(); const isTextBasedQueryMode = isTextBasedQuery(query); const sort = getSortArray(savedSearch.sort ?? [], dataView!, isTextBasedQueryMode); const columns = getDefaultColumns(savedSearch, uiSettings); const chartHidden = getChartHidden(storage, 'discover'); + const dataSource: DiscoverDataSource | undefined = isTextBasedQueryMode + ? createEsqlDataSource() + : dataView?.id + ? createDataViewDataSource({ dataViewId: dataView.id }) + : undefined; const defaultState: DiscoverAppState = { query, @@ -63,7 +72,7 @@ export function getStateDefaults({ ) : sort, columns, - index: isTextBasedQueryMode ? undefined : dataView?.id, + dataSource, interval: 'auto', filters: cloneDeep(searchSource.getOwnField('filter')) as DiscoverAppState['filters'], hideChart: typeof chartHidden === 'boolean' ? chartHidden : undefined, diff --git a/src/plugins/discover/public/application/main/state_management/utils/get_switch_data_view_app_state.ts b/src/plugins/discover/public/application/main/state_management/utils/get_switch_data_view_app_state.ts index f94420403f261..c06cb3b67f235 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/get_switch_data_view_app_state.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/get_switch_data_view_app_state.ts @@ -10,6 +10,8 @@ import { isOfAggregateQueryType, Query, AggregateQuery } from '@kbn/es-query'; import type { DataView } from '@kbn/data-views-plugin/public'; import type { SortOrder } from '@kbn/saved-search-plugin/public'; import { getSortArray } from '../../../../utils/sorting'; +import { DiscoverAppState } from '../discover_app_state_container'; +import { createDataViewDataSource } from '../../../../../common/data_sources'; /** * Helper function to remove or adapt the currently selected columns/sort to be valid with the next @@ -24,7 +26,7 @@ export function getDataViewAppState( modifyColumns: boolean = true, sortDirection: string = 'desc', query?: Query | AggregateQuery -) { +): Partial { let columns = currentColumns || []; if (modifyColumns) { @@ -66,7 +68,9 @@ export function getDataViewAppState( } return { - index: nextDataView.id, + dataSource: nextDataView.id + ? createDataViewDataSource({ dataViewId: nextDataView.id }) + : undefined, columns, sort: nextSort, }; diff --git a/src/plugins/discover/public/application/main/state_management/utils/load_saved_search.ts b/src/plugins/discover/public/application/main/state_management/utils/load_saved_search.ts index ba7d2a9342c24..0997f0f58b0aa 100644 --- a/src/plugins/discover/public/application/main/state_management/utils/load_saved_search.ts +++ b/src/plugins/discover/public/application/main/state_management/utils/load_saved_search.ts @@ -24,6 +24,7 @@ import { } from '../discover_app_state_container'; import { DiscoverGlobalStateContainer } from '../discover_global_state_container'; import { DiscoverServices } from '../../../../build_services'; +import { DataSourceType, isDataSourceType } from '../../../../../common/data_sources'; interface LoadSavedSearchDeps { appStateContainer: DiscoverAppStateContainer; @@ -58,11 +59,24 @@ export const loadSavedSearch = async ( const appState = appStateExists ? appStateContainer.getState() : initialAppState; // Loading the saved search or creating a new one - let nextSavedSearch = savedSearchId - ? await savedSearchContainer.load(savedSearchId) - : await savedSearchContainer.new( - await getStateDataView(params, { services, appState, internalStateContainer }) - ); + let nextSavedSearch: SavedSearch; + + if (savedSearchId) { + nextSavedSearch = await savedSearchContainer.load(savedSearchId); + } else { + const dataViewId = isDataSourceType(appState?.dataSource, DataSourceType.DataView) + ? appState?.dataSource.dataViewId + : undefined; + + nextSavedSearch = await savedSearchContainer.new( + await getStateDataView(params, { + dataViewId, + query: appState?.query, + services, + internalStateContainer, + }) + ); + } // Cleaning up the previous state services.filterManager.setAppFilters([]); @@ -86,14 +100,15 @@ export const loadSavedSearch = async ( // Update saved search by a given app state (in URL) if (appState) { - if (savedSearchId && appState.index) { + if (savedSearchId && isDataSourceType(appState.dataSource, DataSourceType.DataView)) { // This is for the case appState is overwriting the loaded saved search data view const savedSearchDataViewId = nextSavedSearch.searchSource.getField('index')?.id; const stateDataView = await getStateDataView(params, { + dataViewId: appState.dataSource.dataViewId, + query: appState.query, + savedSearch: nextSavedSearch, services, - appState, internalStateContainer, - savedSearch: nextSavedSearch, }); const dataViewDifferentToAppState = stateDataView.id !== savedSearchDataViewId; if ( @@ -175,35 +190,39 @@ function updateBySavedSearch(savedSearch: SavedSearch, deps: LoadSavedSearchDeps const getStateDataView = async ( params: LoadParams, { + dataViewId, + query, savedSearch, - appState, services, internalStateContainer, }: { + dataViewId?: string; + query: DiscoverAppState['query']; savedSearch?: SavedSearch; - appState?: DiscoverAppState; services: DiscoverServices; internalStateContainer: DiscoverInternalStateContainer; } ) => { - const { dataView, dataViewSpec } = params ?? {}; + const { dataView, dataViewSpec } = params; + const isTextBased = isTextBasedQuery(query); + if (dataView) { return dataView; } - const query = appState?.query; - if (isTextBasedQuery(query)) { + if (isTextBased) { return await getDataViewByTextBasedQueryLang(query, dataView, services); } const result = await loadAndResolveDataView( { - id: appState?.index, + id: dataViewId, dataViewSpec, savedSearch, - isTextBasedQuery: isTextBasedQuery(appState?.query), + isTextBasedQuery: isTextBased, }, { services, internalStateContainer } ); + return result.dataView; }; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/common/copy_button.tsx b/src/plugins/discover/public/components/data_types/logs/copy_button.tsx similarity index 82% rename from x-pack/plugins/observability_solution/logs_explorer/public/components/common/copy_button.tsx rename to src/plugins/discover/public/components/data_types/logs/copy_button.tsx index fe02a7a872720..83da6f3896edf 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/common/copy_button.tsx +++ b/src/plugins/discover/public/components/data_types/logs/copy_button.tsx @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { EuiButtonEmpty, EuiFlexItem, copyToClipboard } from '@elastic/eui'; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/common/filter_in_button.tsx b/src/plugins/discover/public/components/data_types/logs/filter_in_button.tsx similarity index 75% rename from x-pack/plugins/observability_solution/logs_explorer/public/components/common/filter_in_button.tsx rename to src/plugins/discover/public/components/data_types/logs/filter_in_button.tsx index e2f43d1b0c5fc..71412a90002bd 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/common/filter_in_button.tsx +++ b/src/plugins/discover/public/components/data_types/logs/filter_in_button.tsx @@ -1,15 +1,16 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { EuiButtonEmpty, EuiFlexItem } from '@elastic/eui'; import React from 'react'; import { generateFilters } from '@kbn/data-plugin/public'; -import { filterForText, actionFilterForText } from './translations'; -import { useVirtualColumnServiceContext } from '../../hooks/use_virtual_column_services'; +import { useVirtualColumnServiceContext } from '../../../application/main/hooks/grid_customisations/use_virtual_column_services'; +import { actionFilterForText, filterForText } from './translations'; export const FilterInButton = ({ property, value }: { property: string; value: string }) => { const ariaFilterForText = actionFilterForText(value); diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/common/filter_out_button.tsx b/src/plugins/discover/public/components/data_types/logs/filter_out_button.tsx similarity index 76% rename from x-pack/plugins/observability_solution/logs_explorer/public/components/common/filter_out_button.tsx rename to src/plugins/discover/public/components/data_types/logs/filter_out_button.tsx index 9291e17cc44fd..3c3892b31ba5e 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/common/filter_out_button.tsx +++ b/src/plugins/discover/public/components/data_types/logs/filter_out_button.tsx @@ -1,15 +1,16 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { EuiButtonEmpty, EuiFlexItem } from '@elastic/eui'; import React from 'react'; import { generateFilters } from '@kbn/data-plugin/public'; -import { filterOutText, actionFilterOutText } from './translations'; -import { useVirtualColumnServiceContext } from '../../hooks/use_virtual_column_services'; +import { useVirtualColumnServiceContext } from '../../../application/main/hooks/grid_customisations/use_virtual_column_services'; +import { actionFilterOutText, filterOutText } from './translations'; export const FilterOutButton = ({ property, value }: { property: string; value: string }) => { const ariaFilterOutText = actionFilterOutText(value); diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/common/log_level.tsx b/src/plugins/discover/public/components/data_types/logs/log_level.tsx similarity index 79% rename from x-pack/plugins/observability_solution/logs_explorer/public/components/common/log_level.tsx rename to src/plugins/discover/public/components/data_types/logs/log_level.tsx index 9f5dfef23ce0d..bddc6486f3c81 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/common/log_level.tsx +++ b/src/plugins/discover/public/components/data_types/logs/log_level.tsx @@ -1,15 +1,16 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import React from 'react'; import { useEuiTheme } from '@elastic/eui'; -import { FlyoutDoc } from '../../../common/document'; +import { LogFlyoutDoc } from '@kbn/discover-utils/src'; +import * as constants from '../../../../common/data_types/logs/constants'; import { ChipWithPopover } from './popover_chip'; -import * as constants from '../../../common/constants'; const LEVEL_DICT = { error: 'danger', @@ -19,7 +20,7 @@ const LEVEL_DICT = { } as const; interface LogLevelProps { - level: FlyoutDoc['log.level']; + level: LogFlyoutDoc['log.level']; dataTestSubj?: string; renderInFlyout?: boolean; } diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/common/popover_chip.tsx b/src/plugins/discover/public/components/data_types/logs/popover_chip.tsx similarity index 95% rename from x-pack/plugins/observability_solution/logs_explorer/public/components/common/popover_chip.tsx rename to src/plugins/discover/public/components/data_types/logs/popover_chip.tsx index 2811bbf5480c4..8631cb563cddb 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/common/popover_chip.tsx +++ b/src/plugins/discover/public/components/data_types/logs/popover_chip.tsx @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import React, { useCallback, useState } from 'react'; diff --git a/src/plugins/discover/public/components/data_types/logs/translations.tsx b/src/plugins/discover/public/components/data_types/logs/translations.tsx new file mode 100644 index 0000000000000..fcf846d0ea891 --- /dev/null +++ b/src/plugins/discover/public/components/data_types/logs/translations.tsx @@ -0,0 +1,300 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import { EuiCode } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; + +export const flyoutContentLabel = i18n.translate('discover.logs.flyoutDetail.label.message', { + defaultMessage: 'Content breakdown', +}); + +export const contentLabel = i18n.translate('discover.logs.dataTable.header.popover.content', { + defaultMessage: 'Content', +}); + +export const resourceLabel = i18n.translate('discover.logs.dataTable.header.popover.resource', { + defaultMessage: 'Resource', +}); + +export const actionsLabel = i18n.translate('discover.logs.dataTable.header.popover.actions', { + defaultMessage: 'Actions', +}); + +export const actionsLabelLowerCase = i18n.translate( + 'discover.logs.dataTable.header.popover.actions.lowercase', + { + defaultMessage: 'actions', + } +); + +export const flyoutServiceLabel = i18n.translate('discover.logs.flyoutDetail.label.service', { + defaultMessage: 'Service', +}); + +export const flyoutTraceLabel = i18n.translate('discover.logs.flyoutDetail.label.trace', { + defaultMessage: 'Trace', +}); + +export const flyoutHostNameLabel = i18n.translate('discover.logs.flyoutDetail.label.hostName', { + defaultMessage: 'Host name', +}); + +export const serviceInfraAccordionTitle = i18n.translate( + 'discover.logs.flyoutDetail.accordion.title.serviceInfra', + { + defaultMessage: 'Service & Infrastructure', + } +); + +export const cloudAccordionTitle = i18n.translate( + 'discover.logs.flyoutDetail.accordion.title.cloud', + { + defaultMessage: 'Cloud', + } +); + +export const otherAccordionTitle = i18n.translate( + 'discover.logs.flyoutDetail.accordion.title.other', + { + defaultMessage: 'Other', + } +); + +export const flyoutOrchestratorClusterNameLabel = i18n.translate( + 'discover.logs.flyoutDetail.label.orchestratorClusterName', + { + defaultMessage: 'Orchestrator cluster Name', + } +); + +export const flyoutOrchestratorResourceIdLabel = i18n.translate( + 'discover.logs.flyoutDetail.label.orchestratorResourceId', + { + defaultMessage: 'Orchestrator resource ID', + } +); + +export const flyoutCloudProviderLabel = i18n.translate( + 'discover.logs.flyoutDetail.label.cloudProvider', + { + defaultMessage: 'Cloud provider', + } +); + +export const flyoutCloudRegionLabel = i18n.translate( + 'discover.logs.flyoutDetail.label.cloudRegion', + { + defaultMessage: 'Cloud region', + } +); + +export const flyoutCloudAvailabilityZoneLabel = i18n.translate( + 'discover.logs.flyoutDetail.label.cloudAvailabilityZone', + { + defaultMessage: 'Cloud availability zone', + } +); + +export const flyoutCloudProjectIdLabel = i18n.translate( + 'discover.logs.flyoutDetail.label.cloudProjectId', + { + defaultMessage: 'Cloud project ID', + } +); + +export const flyoutCloudInstanceIdLabel = i18n.translate( + 'discover.logs.flyoutDetail.label.cloudInstanceId', + { + defaultMessage: 'Cloud instance ID', + } +); + +export const flyoutLogPathFileLabel = i18n.translate( + 'discover.logs.flyoutDetail.label.logPathFile', + { + defaultMessage: 'Log path file', + } +); + +export const flyoutNamespaceLabel = i18n.translate('discover.logs.flyoutDetail.label.namespace', { + defaultMessage: 'Namespace', +}); + +export const flyoutDatasetLabel = i18n.translate('discover.logs.flyoutDetail.label.dataset', { + defaultMessage: 'Dataset', +}); + +export const flyoutShipperLabel = i18n.translate('discover.logs.flyoutDetail.label.shipper', { + defaultMessage: 'Shipper', +}); + +export const actionFilterForText = (text: string) => + i18n.translate('discover.logs.flyoutDetail.value.hover.filterFor', { + defaultMessage: 'Filter for this {value}', + values: { + value: text, + }, + }); + +export const actionFilterOutText = (text: string) => + i18n.translate('discover.logs.flyoutDetail.value.hover.filterOut', { + defaultMessage: 'Filter out this {value}', + values: { + value: text, + }, + }); + +export const filterOutText = i18n.translate('discover.logs.popoverAction.filterOut', { + defaultMessage: 'Filter out', +}); + +export const filterForText = i18n.translate('discover.logs.popoverAction.filterFor', { + defaultMessage: 'Filter for', +}); + +export const flyoutHoverActionFilterForFieldPresentText = i18n.translate( + 'discover.logs.flyoutDetail.value.hover.filterForFieldPresent', + { + defaultMessage: 'Filter for field present', + } +); + +export const flyoutHoverActionToggleColumnText = i18n.translate( + 'discover.logs.flyoutDetail.value.hover.toggleColumn', + { + defaultMessage: 'Toggle column in table', + } +); + +export const flyoutHoverActionCopyToClipboardText = i18n.translate( + 'discover.logs.flyoutDetail.value.hover.copyToClipboard', + { + defaultMessage: 'Copy to clipboard', + } +); + +export const copyValueText = i18n.translate('discover.logs.popoverAction.copyValue', { + defaultMessage: 'Copy value', +}); + +export const copyValueAriaText = (fieldName: string) => + i18n.translate('discover.logs.popoverAction.copyValueAriaText', { + defaultMessage: 'Copy value of {fieldName}', + values: { + fieldName, + }, + }); + +export const flyoutAccordionShowMoreText = (count: number) => + i18n.translate('discover.logs.flyoutDetail.section.showMore', { + defaultMessage: '+ {hiddenCount} more', + values: { + hiddenCount: count, + }, + }); + +export const openCellActionPopoverAriaText = i18n.translate( + 'discover.logs.popoverAction.openPopover', + { + defaultMessage: 'Open popover', + } +); + +export const closeCellActionPopoverText = i18n.translate( + 'discover.logs.popoverAction.closePopover', + { + defaultMessage: 'Close popover', + } +); + +export const contentHeaderTooltipParagraph1 = ( + log.level, + message: message, + }} + /> +); + +export const contentHeaderTooltipParagraph2 = i18n.translate( + 'discover.logs.dataTable.header.content.tooltip.paragraph2', + { + defaultMessage: 'When the message field is empty, one of the following is displayed:', + } +); + +export const resourceHeaderTooltipParagraph = i18n.translate( + 'discover.logs.dataTable.header.resource.tooltip.paragraph', + { + defaultMessage: "Fields that provide information on the document's source, such as:", + } +); + +export const actionsHeaderTooltipParagraph = i18n.translate( + 'discover.logs.dataTable.header.actions.tooltip.paragraph', + { + defaultMessage: 'Fields that provide actionable information, such as:', + } +); + +export const actionsHeaderTooltipExpandAction = i18n.translate( + 'discover.logs.dataTable.header.actions.tooltip.expand', + { defaultMessage: 'Expand log details' } +); + +export const actionsHeaderTooltipDegradedAction = ( + + _ignored + + ), + }} + /> +); + +export const actionsHeaderTooltipStacktraceAction = i18n.translate( + 'discover.logs.dataTable.header.actions.tooltip.stacktrace', + { defaultMessage: 'Access to available stacktraces based on:' } +); + +export const degradedDocButtonLabelWhenPresent = i18n.translate( + 'discover.logs.dataTable.controlColumn.actions.button.degradedDocPresent', + { + defaultMessage: + "This document couldn't be parsed correctly. Not all fields are properly populated", + } +); + +export const degradedDocButtonLabelWhenNotPresent = i18n.translate( + 'discover.logs.dataTable.controlColumn.actions.button.degradedDocNotPresent', + { + defaultMessage: 'All fields in this document were parsed correctly', + } +); + +export const stacktraceAvailableControlButton = i18n.translate( + 'discover.logs.dataTable.controlColumn.actions.button.stacktrace.available', + { + defaultMessage: 'Stacktraces available', + } +); + +export const stacktraceNotAvailableControlButton = i18n.translate( + 'discover.logs.dataTable.controlColumn.actions.button.stacktrace.notAvailable', + { + defaultMessage: 'Stacktraces not available', + } +); diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/cell_renderer.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/cell_renderer.tsx similarity index 63% rename from x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/cell_renderer.tsx rename to src/plugins/discover/public/components/discover_grid/virtual_columns/logs/cell_renderer.tsx index eefb165167f4a..d7f5b2fc63170 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/cell_renderer.tsx +++ b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/cell_renderer.tsx @@ -1,20 +1,21 @@ /* * 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. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import React from 'react'; import type { DataGridCellValueElementProps } from '@kbn/unified-data-table'; -import { LogsExplorerDiscoverServices } from '../../controller'; -import { VirtualColumnServiceProvider } from '../../hooks/use_virtual_column_services'; -import { CONTENT_FIELD, RESOURCE_FIELD } from '../../../common/constants'; +import { DataPublicPluginStart } from '@kbn/data-plugin/public'; +import { VirtualColumnServiceProvider } from '../../../../application/main/hooks/grid_customisations/use_virtual_column_services'; +import { CONTENT_FIELD, RESOURCE_FIELD } from '../../../../../common/data_types/logs/constants'; import { Content } from './content'; import { Resource } from './resource'; export const renderCell = - (type: string, { data }: { data: LogsExplorerDiscoverServices['data'] }) => + (type: string, { data }: { data: DataPublicPluginStart }) => (props: DataGridCellValueElementProps) => { const { dataView } = props; const virtualColumnServices = { diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/column.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column.tsx similarity index 76% rename from x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/column.tsx rename to src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column.tsx index 9e1ad91079ace..b168478dd9388 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/column.tsx +++ b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column.tsx @@ -1,14 +1,15 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import React from 'react'; import { CustomGridColumnProps } from '@kbn/unified-data-table'; +import { CONTENT_FIELD, RESOURCE_FIELD } from '../../../../../common/data_types/logs/constants'; import { ContentColumnTooltip } from './column_tooltips/content_column_tooltip'; -import { CONTENT_FIELD, RESOURCE_FIELD } from '../../../common/constants'; import { ResourceColumnTooltip } from './column_tooltips/resource_column_tooltip'; export const renderColumn = diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/column_tooltips/content_column_tooltip.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/content_column_tooltip.tsx similarity index 80% rename from x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/column_tooltips/content_column_tooltip.tsx rename to src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/content_column_tooltip.tsx index df33f1f1beff3..948085f2d6e02 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/column_tooltips/content_column_tooltip.tsx +++ b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/content_column_tooltip.tsx @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { EuiText, useEuiTheme } from '@elastic/eui'; @@ -13,10 +14,10 @@ import { contentHeaderTooltipParagraph1, contentHeaderTooltipParagraph2, contentLabel, -} from '../../common/translations'; +} from '../../../../data_types/logs/translations'; +import * as constants from '../../../../../../common/data_types/logs/constants'; import { TooltipButton } from './tooltip_button'; import { FieldWithToken } from './field_with_token'; -import * as constants from '../../../../common/constants'; export const ContentColumnTooltip = ({ column, headerRowHeight }: CustomGridColumnProps) => { const { euiTheme } = useEuiTheme(); diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/field_with_token.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/field_with_token.tsx new file mode 100644 index 0000000000000..abe5ed875e767 --- /dev/null +++ b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/field_with_token.tsx @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 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 { EuiFlexGroup, EuiFlexItem, EuiText, EuiToken } from '@elastic/eui'; +import React from 'react'; +import { css } from '@emotion/react'; +import { euiThemeVars } from '@kbn/ui-theme'; + +const spacingXsCss = css` + margin-bottom: ${euiThemeVars.euiSizeXS}; +`; + +export const FieldWithToken = ({ + field, + iconType = 'tokenKeyword', +}: { + field: string; + iconType?: string; +}) => { + return ( +
+ + + + + + + {field} + + + +
+ ); +}; diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/hover_popover.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/hover_popover.tsx new file mode 100644 index 0000000000000..100fb8b31a348 --- /dev/null +++ b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/hover_popover.tsx @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useEffect, useRef, useState } from 'react'; +import { EuiPopover, EuiPopoverTitle } from '@elastic/eui'; + +export const HoverPopover = ({ + children, + button, + title, +}: { + children: React.ReactChild; + button: React.ReactElement; + title: string; +}) => { + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const leaveTimer = useRef(null); + + const clearTimer = () => { + if (leaveTimer.current) { + clearTimeout(leaveTimer.current); + } + }; + + const onMouseEnter = () => { + clearTimer(); + setIsPopoverOpen(true); + }; + + const onMouseLeave = () => { + leaveTimer.current = setTimeout(() => setIsPopoverOpen(false), 100); + }; + + useEffect(() => { + return () => { + clearTimer(); + }; + }, []); + + return ( +
+ + {title} + {children} + +
+ ); +}; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/column_tooltips/resource_column_tooltip.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/resource_column_tooltip.tsx similarity index 77% rename from x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/column_tooltips/resource_column_tooltip.tsx rename to src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/resource_column_tooltip.tsx index 64a64156cbaea..1ab50b08dcb1b 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/column_tooltips/resource_column_tooltip.tsx +++ b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/resource_column_tooltip.tsx @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import React from 'react'; @@ -10,9 +11,12 @@ import { css } from '@emotion/react'; import { EuiText } from '@elastic/eui'; import type { CustomGridColumnProps } from '@kbn/unified-data-table'; import { euiThemeVars } from '@kbn/ui-theme'; -import { resourceHeaderTooltipParagraph, resourceLabel } from '../../common/translations'; +import { + resourceHeaderTooltipParagraph, + resourceLabel, +} from '../../../../data_types/logs/translations'; +import * as constants from '../../../../../../common/data_types/logs/constants'; import { TooltipButton } from './tooltip_button'; -import * as constants from '../../../../common/constants'; import { FieldWithToken } from './field_with_token'; const spacingCSS = css` diff --git a/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/tooltip_button.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/tooltip_button.tsx new file mode 100644 index 0000000000000..3f7d616be3014 --- /dev/null +++ b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/column_tooltips/tooltip_button.tsx @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import React, { useEffect, useRef, useState, useCallback, useMemo } from 'react'; +import { EuiIcon } from '@elastic/eui'; +import ColumnHeaderTruncateContainer from '@kbn/unified-data-table/src/components/column_header_truncate_container'; + +import { EuiPopover, EuiPopoverTitle } from '@elastic/eui'; + +export const TooltipButton = ({ + children, + popoverTitle, + displayText, + headerRowHeight, + iconType = 'questionInCircle', +}: { + children: React.ReactChild; + popoverTitle: string; + displayText?: string; + headerRowHeight?: number; + iconType?: string; +}) => { + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const leaveTimer = useRef(null); + + const clearTimer = useMemo( + () => () => { + if (leaveTimer.current) { + clearTimeout(leaveTimer.current); + } + }, + [] + ); + + const onMouseEnter = useCallback(() => { + clearTimer(); + setIsPopoverOpen(true); + }, [clearTimer]); + + const onMouseLeave = useCallback(() => { + leaveTimer.current = setTimeout(() => setIsPopoverOpen(false), 100); + }, []); + + useEffect(() => { + return () => { + clearTimer(); + }; + }, [clearTimer]); + + return ( + + {displayText}{' '} + + } + isOpen={isPopoverOpen} + anchorPosition="upCenter" + panelPaddingSize="s" + ownFocus={false} + > + {popoverTitle} + {children} + + + ); +}; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/content.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/content.tsx similarity index 86% rename from x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/content.tsx rename to src/plugins/discover/public/components/discover_grid/virtual_columns/logs/content.tsx index b13cacec025f3..4be45b3d7d96f 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/content.tsx +++ b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/content.tsx @@ -1,8 +1,9 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import React, { useMemo } from 'react'; @@ -18,8 +19,8 @@ import { import { i18n } from '@kbn/i18n'; import type { DataTableRecord } from '@kbn/discover-utils/src/types'; import { dynamic } from '@kbn/shared-ux-utility'; -import { LogLevel } from '../common/log_level'; -import * as constants from '../../../common/constants'; +import * as constants from '../../../../../common/data_types/logs/constants'; +import { LogLevel } from '../../../data_types/logs/log_level'; const SourceDocument = dynamic( () => import('@kbn/unified-data-table/src/components/source_document') @@ -38,10 +39,8 @@ const LogMessage = ({ field, value }: { field?: string; value: string }) => { const renderFieldPrefix = field && field !== constants.MESSAGE_FIELD; return ( - {renderFieldPrefix && ( - {field} - )} - + {renderFieldPrefix && {field}} + {value} @@ -59,7 +58,7 @@ const SourcePopoverContent = ({ }) => { const closeButton = ( )} diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/resource.tsx b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/resource.tsx similarity index 82% rename from x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/resource.tsx rename to src/plugins/discover/public/components/discover_grid/virtual_columns/logs/resource.tsx index 7cecdeee5ce40..84f95579af7b9 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/components/virtual_columns/resource.tsx +++ b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/resource.tsx @@ -1,18 +1,19 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. */ import React from 'react'; import type { DataGridCellValueElementProps } from '@kbn/unified-data-table'; import { AgentName } from '@kbn/elastic-agent-utils'; import { dynamic } from '@kbn/shared-ux-utility'; -import { ChipWithPopover } from '../common/popover_chip'; -import * as constants from '../../../common/constants'; -import { getUnformattedResourceFields } from '../../utils/resource'; -import { LogDocument } from '../../../common/document'; +import { LogDocument } from '@kbn/discover-utils/src'; +import * as constants from '../../../../../common/data_types/logs/constants'; +import { getUnformattedResourceFields } from './utils/resource'; +import { ChipWithPopover } from '../../../data_types/logs/popover_chip'; const AgentIcon = dynamic(() => import('@kbn/custom-icons/src/components/agent_icon')); diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/utils/resource.ts b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/utils/resource.ts similarity index 80% rename from x-pack/plugins/observability_solution/logs_explorer/public/utils/resource.ts rename to src/plugins/discover/public/components/discover_grid/virtual_columns/logs/utils/resource.ts index 1b1f3dd078008..7f6d3b5ed7dae 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/utils/resource.ts +++ b/src/plugins/discover/public/components/discover_grid/virtual_columns/logs/utils/resource.ts @@ -1,13 +1,13 @@ /* * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. + * 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 { LogDocument, ResourceFields } from '../../common/document'; -import * as constants from '../../common/constants'; -import { getFieldFromDoc } from './get_field_from_flattened_doc'; +import { getFieldFromDoc, LogDocument, ResourceFields } from '@kbn/discover-utils/src'; +import * as constants from '../../../../../../common/data_types/logs/constants'; export const getUnformattedResourceFields = (doc: LogDocument): ResourceFields => { const serviceName = getFieldFromDoc(doc, constants.SERVICE_NAME_FIELD); diff --git a/src/plugins/discover/public/customizations/customization_types/data_table_customisation.ts b/src/plugins/discover/public/customizations/customization_types/data_table_customisation.ts index 2ed371fd2109e..3e6e510488fbd 100644 --- a/src/plugins/discover/public/customizations/customization_types/data_table_customisation.ts +++ b/src/plugins/discover/public/customizations/customization_types/data_table_customisation.ts @@ -6,15 +6,10 @@ * Side Public License, v 1. */ -import { - CustomCellRenderer, - CustomControlColumnConfiguration, - CustomGridColumnsConfiguration, -} from '@kbn/unified-data-table'; +import { CustomControlColumnConfiguration } from '@kbn/unified-data-table'; export interface DataTableCustomization { id: 'data_table'; - customCellRenderer?: CustomCellRenderer; - customGridColumnsConfiguration?: CustomGridColumnsConfiguration; + logsEnabled: boolean; // TODO / NOTE: Just temporary until Discover's data type contextual awareness lands. customControlColumnsConfiguration?: CustomControlColumnConfiguration; } diff --git a/src/plugins/discover/public/customizations/customization_types/field_list_customisation.ts b/src/plugins/discover/public/customizations/customization_types/field_list_customisation.ts index 706022112e3fe..a43126a1aaaa3 100644 --- a/src/plugins/discover/public/customizations/customization_types/field_list_customisation.ts +++ b/src/plugins/discover/public/customizations/customization_types/field_list_customisation.ts @@ -6,12 +6,7 @@ * Side Public License, v 1. */ -import type { DataViewField } from '@kbn/data-views-plugin/common'; -import { FieldsGroup } from '@kbn/unified-field-list/src/types'; - export interface FieldListCustomization { id: 'field_list'; - additionalFieldGroups?: { - smartFields?: FieldsGroup['fields']; - }; + logsFieldsEnabled: boolean; // TODO / NOTE: Just temporary until Discover's data type contextual awareness lands. } diff --git a/src/plugins/discover/tsconfig.json b/src/plugins/discover/tsconfig.json index 8ea9e844d10a9..bf4c06f1c5dbe 100644 --- a/src/plugins/discover/tsconfig.json +++ b/src/plugins/discover/tsconfig.json @@ -84,9 +84,13 @@ "@kbn/shared-ux-markdown", "@kbn/data-view-utils", "@kbn/presentation-publishing", + "@kbn/elastic-agent-utils", + "@kbn/custom-icons", "@kbn/observability-ai-assistant-plugin", "@kbn/data-visualizer-plugin", - "@kbn/search-types" + "@kbn/search-types", + "@kbn/custom-icons", + "@kbn/observability-ai-assistant-plugin" ], "exclude": ["target/**/*"] } diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts index fc4786dd5ca3f..9c4e025dd92b5 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/schema.ts @@ -627,6 +627,10 @@ export const stackManagementSchema: MakeSchemaFrom = { type: 'boolean', _meta: { description: 'Non-default value of setting.' }, }, + 'observability:enableInfrastructureContainerAssetView': { + type: 'boolean', + _meta: { description: 'Non-default value of setting.' }, + }, 'observability:enableInfrastructureProfilingIntegration': { type: 'boolean', _meta: { description: 'Non-default value of setting.' }, diff --git a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts index bc1c315edae29..e3b84245ce3f0 100644 --- a/src/plugins/kibana_usage_collection/server/collectors/management/types.ts +++ b/src/plugins/kibana_usage_collection/server/collectors/management/types.ts @@ -46,6 +46,7 @@ export interface UsageStats { 'observability:apmAWSLambdaPriceFactor': string; 'observability:apmAWSLambdaRequestCostPerMillion': number; 'observability:enableInfrastructureHostsView': boolean; + 'observability:enableInfrastructureContainerAssetView': boolean; 'observability:enableInfrastructureProfilingIntegration': boolean; 'observability:enableInfrastructureAssetCustomDashboards': boolean; 'observability:apmAgentExplorerView': boolean; diff --git a/src/plugins/telemetry/schema/oss_plugins.json b/src/plugins/telemetry/schema/oss_plugins.json index 717e5ebabbe1b..673361881b2ff 100644 --- a/src/plugins/telemetry/schema/oss_plugins.json +++ b/src/plugins/telemetry/schema/oss_plugins.json @@ -10404,6 +10404,12 @@ "description": "Non-default value of setting." } }, + "observability:enableInfrastructureContainerAssetView":{ + "type": "boolean", + "_meta": { + "description": "Non-default value of setting." + } + }, "observability:enableInfrastructureProfilingIntegration": { "type": "boolean", "_meta": { diff --git a/test/functional/apps/discover/group5/_url_state.ts b/test/functional/apps/discover/group5/_url_state.ts index e97ac332e8b6e..099fbed1589a3 100644 --- a/test/functional/apps/discover/group5/_url_state.ts +++ b/test/functional/apps/discover/group5/_url_state.ts @@ -87,7 +87,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { let discoverLink = await appsMenu.getLink('Discover'); expect(discoverLink?.href).to.contain( '/app/discover#/?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:now-15m,to:now))' + - "&_a=(columns:!(),filters:!(),index:'logstash-*',interval:auto,query:(language:kuery,query:''),sort:!(!('@timestamp',desc)))" + "&_a=(columns:!(),dataSource:(dataViewId:'logstash-*',type:dataView),filters:!(),interval:auto,query:(language:kuery,query:''),sort:!(!('@timestamp',desc)))" ); await appsMenu.closeCollapsibleNav(); await PageObjects.timePicker.setDefaultAbsoluteRange(); @@ -107,7 +107,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'query:(bool:(minimum_should_match:1,should:!((match_phrase:(extension.raw:jpg)),' + "(match_phrase:(extension.raw:css))))))),query:(language:kuery,query:'')," + "refreshInterval:(pause:!t,value:60000),time:(from:'2015-09-19T06:31:44.000Z'," + - "to:'2015-09-23T18:31:44.000Z'))&_a=(columns:!(),filters:!(),index:'logstash-*'," + + "to:'2015-09-23T18:31:44.000Z'))&_a=(columns:!(),dataSource:(dataViewId:'logstash-*',type:dataView),filters:!()," + "interval:auto,query:(language:kuery,query:''),sort:!(!('@timestamp',desc)))" ); await appsMenu.clickLink('Discover', { category: 'kibana' }); diff --git a/test/functional/page_objects/discover_page.ts b/test/functional/page_objects/discover_page.ts index 9145c5f991ee2..9d02198ea5926 100644 --- a/test/functional/page_objects/discover_page.ts +++ b/test/functional/page_objects/discover_page.ts @@ -701,11 +701,11 @@ export class DiscoverPageObject extends FtrService { */ public async validateDataViewReffsEquality() { const currentUrl = await this.browser.getCurrentUrl(); - const matches = currentUrl.matchAll(/index:[^,]*/g); + const matches = currentUrl.matchAll(/dataViewId:[^,]*/g); const indexes = []; for (const matchEntry of matches) { const [index] = matchEntry; - indexes.push(decodeURIComponent(index).replace('index:', '').replaceAll("'", '')); + indexes.push(decodeURIComponent(index).replace('dataViewId:', '').replaceAll("'", '')); } const first = indexes[0]; diff --git a/test/package/Vagrantfile b/test/package/Vagrantfile index ea7e87d74b785..b8c24d02c8eba 100644 --- a/test/package/Vagrantfile +++ b/test/package/Vagrantfile @@ -46,14 +46,7 @@ Vagrant.configure("2") do |config| vb.memory = 4096 vb.cpus = 2 end - fips.vm.box = 'generic/rhel9' - fips.vm.provision "shell", inline: <<-SHELL - echo "export OPENSSL_MODULES=/usr/local/lib64/ossl-modules" >> /etc/profile.d/kibana-fips-env.sh - echo "export TEST_BROWSER_HEADLESS=1" >> /etc/profile.d/kibana-fips-env.sh - echo "export ES_TMPDIR=/home/vagrant/kibana/.es/tmp" >> /etc/profile.d/kibana-fips-env.sh - # Remove after https://github.com/elastic/kibana-operations/issues/96 - echo "export FTR_FIPS_MODE=1" >> /etc/profile.d/kibana-fips-env.sh - SHELL + fips.vm.box = 'ubuntu/jammy64' fips.vm.provision "ansible" do |ansible| ansible.playbook = "fips.yml" end diff --git a/test/package/fips.yml b/test/package/fips.yml index ae62b386c0cde..6682e32b0f6be 100644 --- a/test/package/fips.yml +++ b/test/package/fips.yml @@ -6,7 +6,9 @@ nvm_ver: "0.39.7" openssl_sha: "sha256:6c13d2bf38fdf31eac3ce2a347073673f5d63263398f1f69d0df4a41253e4b3e" openssl_ver: "3.0.8" + openssl_src_path: "{{ kibana_dist_path }}/openssl-{{ openssl_ver }}" + openssl_path: "{{ kibana_dist_path }}/openssl" roles: - - upgrade_yum_packages + - upgrade_apt_packages - install_kibana_fips - assert_fips_enabled diff --git a/test/package/roles/assert_fips_enabled/tasks/main.yml b/test/package/roles/assert_fips_enabled/tasks/main.yml index 936d43c49026a..74ebe283673cb 100644 --- a/test/package/roles/assert_fips_enabled/tasks/main.yml +++ b/test/package/roles/assert_fips_enabled/tasks/main.yml @@ -1,5 +1,7 @@ - name: register kibana node getFips - command: "{{ kibana_dist_path }}/node/bin/node --enable-fips --openssl-config={{ kibana_dist_path }}/config/nodejs.cnf -p 'crypto.getFips()'" + shell: + cmd: "source /home/vagrant/.profile && {{ kibana_dist_path }}/node/bin/node --enable-fips --openssl-config={{ kibana_dist_path }}/config/nodejs.cnf -p 'crypto.getFips()'" + executable: /bin/bash register: kibana_node_fips - debug: diff --git a/test/package/roles/install_kibana_fips/tasks/main.yml b/test/package/roles/install_kibana_fips/tasks/main.yml index 3bfe729f73bd1..49376106171bd 100644 --- a/test/package/roles/install_kibana_fips/tasks/main.yml +++ b/test/package/roles/install_kibana_fips/tasks/main.yml @@ -6,18 +6,37 @@ - "processor_cores" when: ansible_processor_vcpus is not defined -- name: fix /var/log permissions for kibana +- name: setup env variables + blockinfile: + path: "/home/vagrant/.profile" + block: | + export OPENSSL_MODULES=/usr/share/kibana/openssl/lib/ossl-modules + export TEST_BROWSER_HEADLESS=1 + export FTR_DISABLE_ES_TMPDIR=true + owner: vagrant + group: vagrant + mode: '0644' + +- name: add chrome apt signing key become: yes - file: - path: /var/log - state: directory - recurse: true - mode: "0777" + apt_key: + url: https://dl.google.com/linux/linux_signing_key.pub + state: present -- name: create tmp dir for ES - file: - path: "{{ kibana_src_path }}/.es/tmp" - state: directory +- name: add chrome apt repository + become: yes + apt_repository: + repo: deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main + state: present + +- name: install apt packages + become: yes + apt: + pkg: + - build-essential + - google-chrome-stable + - unzip + state: latest - name: slurp kibana node version slurp: @@ -31,7 +50,7 @@ - name: install nvm shell: chdir: "$HOME" - cmd: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v{{ nvm_ver }}/install.sh | bash + cmd: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v{{ nvm_ver }}/install.sh | PROFILE=/home/vagrant/.profile bash - name: install kibana node version shell: @@ -40,12 +59,11 @@ args: executable: /bin/bash -- name: "ensure {{ kibana_dist_path }} dir exists" +- name: "ensure {{ openssl_path }} dir exists" become: yes file: - path: "{{ kibana_dist_path }}" + path: "{{ openssl_path }}" state: directory - mode: "0777" - name: find kibana distribution find: @@ -99,35 +117,54 @@ delay: 10 get_url: url: "https://www.openssl.org/source/openssl-{{ openssl_ver }}.tar.gz" - dest: "{{ kibana_dist_path }}/openssl-{{ openssl_ver }}.tar.gz" + dest: "{{ openssl_src_path }}.tar.gz" checksum: "{{ openssl_sha }}" - name: extract OpenSSL become: yes unarchive: - src: "{{ kibana_dist_path }}/openssl-{{ openssl_ver }}.tar.gz" + src: "{{ openssl_src_path }}.tar.gz" dest: "{{ kibana_dist_path }}" remote_src: yes - name: configure OpenSSL for FIPS become: yes shell: - chdir: "{{ kibana_dist_path }}/openssl-{{ openssl_ver }}" - cmd: ./Configure enable-fips + chdir: "{{ openssl_src_path }}" + cmd: "./Configure --prefix={{ openssl_path }} --openssldir={{ openssl_path }}/ssl --libdir={{ openssl_path }}/lib enable-fips" - name: compile OpenSSL with FIPS become: yes make: - chdir: "{{ kibana_dist_path }}/openssl-{{ openssl_ver }}" + chdir: "{{ openssl_src_path }}" jobs: "{{ ansible_facts['processor_vcpus'] }}" - name: install OpenSSL with FIPS become: yes make: - chdir: "{{ kibana_dist_path }}/openssl-{{ openssl_ver }}" + chdir: "{{ openssl_src_path }}" target: install -- name: link OpenSSL package +- name: "change owner of {{ kibana_dist_path }} to vagrant" become: yes - shell: - cmd: ldconfig /usr/local/lib64/ + file: + path: "{{ kibana_dist_path }}" + owner: vagrant + group: vagrant + recurse: yes + +- name: fix /var/log permissions for kibana + become: yes + file: + path: /var/log + state: directory + recurse: true + mode: "0777" + +- name: increase vm.max_map_count for ES + become: yes + sysctl: + name: vm.max_map_count + value: '262144' + state: present + reload: yes \ No newline at end of file diff --git a/test/package/templates/fips/nodejs.cnf b/test/package/templates/fips/nodejs.cnf index bd8fece6674d7..f4f3a076975eb 100644 --- a/test/package/templates/fips/nodejs.cnf +++ b/test/package/templates/fips/nodejs.cnf @@ -9,7 +9,7 @@ ########################################################################## nodejs_conf = nodejs_init -.include /usr/local/ssl/fipsmodule.cnf +.include /usr/share/kibana/openssl/ssl/fipsmodule.cnf [nodejs_init] providers = provider_sect diff --git a/versions.json b/versions.json index 1b77d36b6b7a7..30d89496af039 100644 --- a/versions.json +++ b/versions.json @@ -13,6 +13,12 @@ "currentMajor": true, "previousMinor": true }, + { + "version": "8.13.5", + "branch": "8.13", + "currentMajor": true, + "previousMinor": true + }, { "version": "7.17.22", "branch": "7.17", diff --git a/x-pack/dev-tools/api_debug/request_from_api.js b/x-pack/dev-tools/api_debug/request_from_api.js index 1a50232536377..1363a6a3b244d 100644 --- a/x-pack/dev-tools/api_debug/request_from_api.js +++ b/x-pack/dev-tools/api_debug/request_from_api.js @@ -7,7 +7,6 @@ import fetch from 'node-fetch'; import { resolve } from 'path'; -import abab from 'abab'; import pkg from '../../package.json'; import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common/src/constants'; @@ -17,7 +16,7 @@ function getRequestParams(argv) { // use `--auth=myuser:mypassword` or else elastic:changeme is defaulted // passing `--auth` with no value effectively sends no auth const auth = argv.auth || 'elastic:changeme'; - const authStr = abab.btoa(auth); + const authStr = Buffer.from(auth).toString('base64'); // auto-add a leading slash to basePath const basePath = argv.basePath ? '/' + argv.basePath : ''; diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_header/assistant_header_flyout.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_header/assistant_header_flyout.tsx index 659ee33590ed6..be97f716b2740 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_header/assistant_header_flyout.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_header/assistant_header_flyout.tsx @@ -45,6 +45,7 @@ interface OwnProps { conversations: Record; refetchConversationsState: () => Promise; onConversationCreate: () => Promise; + isAssistantEnabled: boolean; } type Props = OwnProps; @@ -70,6 +71,7 @@ export const AssistantHeaderFlyout: React.FC = ({ conversations, refetchConversationsState, onConversationCreate, + isAssistantEnabled, }) => { const showAnonymizedValuesChecked = useMemo( () => @@ -140,6 +142,7 @@ export const AssistantHeaderFlyout: React.FC = ({ isExpanded={!!chatHistoryVisible} setIsExpanded={setChatHistoryVisible} onConversationCreate={onConversationCreate} + isAssistantEnabled={isAssistantEnabled} > diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/flyout_navigation.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/flyout_navigation.tsx index 8ea88f6154c34..85d7360c2870a 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/flyout_navigation.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/assistant_overlay/flyout_navigation.tsx @@ -18,6 +18,7 @@ export interface FlyoutNavigationProps { setIsExpanded?: (value: boolean) => void; children: React.ReactNode; onConversationCreate?: () => Promise; + isAssistantEnabled: boolean; } const VerticalSeparator = styled.div` @@ -34,7 +35,7 @@ const VerticalSeparator = styled.div` */ export const FlyoutNavigation = memo( - ({ isExpanded, setIsExpanded, children, onConversationCreate }) => { + ({ isExpanded, setIsExpanded, children, onConversationCreate, isAssistantEnabled }) => { const onToggle = useCallback( () => setIsExpanded && setIsExpanded(!isExpanded), [isExpanded, setIsExpanded] @@ -43,6 +44,7 @@ export const FlyoutNavigation = memo( const toggleButton = useMemo( () => ( ( } /> ), - [isExpanded, onToggle] + [isAssistantEnabled, isExpanded, onToggle] ); return ( @@ -96,6 +98,7 @@ export const FlyoutNavigation = memo( color="primary" iconType="newChat" onClick={onConversationCreate} + disabled={!isAssistantEnabled} > {NEW_CHAT} diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/block_bot/cta.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/block_bot/cta.tsx index afdb8071eea3c..bb2339c89cfc1 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/block_bot/cta.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/block_bot/cta.tsx @@ -6,9 +6,10 @@ */ import React from 'react'; -import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiText } from '@elastic/eui'; import { css } from '@emotion/react'; import { HttpSetup } from '@kbn/core-http-browser'; +import { ENTERPRISE } from '../../content/prompts/welcome/translations'; import { UpgradeButtons } from '../../upgrade/upgrade_buttons'; interface OwnProps { @@ -33,11 +34,24 @@ export const BlockBotCallToAction: React.FC = ({ const basePath = http.basePath.get(); return !isAssistantEnabled ? ( + + +

{ENTERPRISE}

+
+
{}
) : isWelcomeSetup ? ( diff --git a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx index 082a747c04b86..5672a48dad0b9 100644 --- a/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx +++ b/x-pack/packages/kbn-elastic-assistant/impl/assistant/index.tsx @@ -944,6 +944,7 @@ const AssistantComponent: React.FC = ({ conversations={conversations} refetchConversationsState={refetchConversationsState} onConversationCreate={handleCreateConversation} + isAssistantEnabled={isAssistantEnabled} /> {/* Create portals for each EuiCodeBlock to add the `Investigate in Timeline` action */} @@ -983,16 +984,19 @@ const AssistantComponent: React.FC = ({ ) } > - - {flyoutBodyContent} - {disclaimer} - - {/* */} + {!isAssistantEnabled ? ( + + ) : ( + + {flyoutBodyContent} + {disclaimer} + + )} ( - + ); } diff --git a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts index f11802c206693..c473c21da6e84 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts @@ -37,6 +37,7 @@ export const getAssistantToolParams = ({ alertsIndexPattern, anonymizationFields, esClient, + langChainTimeout, latestReplacements, llm, onNewReplacements, @@ -46,6 +47,7 @@ export const getAssistantToolParams = ({ alertsIndexPattern: string; anonymizationFields?: AnonymizationFieldResponse[]; esClient: ElasticsearchClient; + langChainTimeout: number; latestReplacements: Replacements; llm: ActionsClientLlm; onNewReplacements: (newReplacements: Replacements) => void; @@ -61,6 +63,7 @@ export const getAssistantToolParams = ({ isEnabledKnowledgeBase: false, // not required for attack discovery chain: undefined, // not required for attack discovery esClient, + langChainTimeout, llm, modelExists: false, // not required for attack discovery onNewReplacements, diff --git a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/post_attack_discovery.ts b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/post_attack_discovery.ts index 12546ddbb25b8..923f33dc44f3d 100644 --- a/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/post_attack_discovery.ts +++ b/x-pack/plugins/elastic_assistant/server/routes/attack_discovery/post_attack_discovery.ts @@ -24,6 +24,10 @@ import { buildResponse } from '../../lib/build_response'; import { ElasticAssistantRequestHandlerContext } from '../../types'; import { getLlmType } from '../utils'; +const ROUTE_HANDLER_TIMEOUT = 10 * 60 * 1000; // 10 * 60 seconds = 10 minutes +const LANG_CHAIN_TIMEOUT = ROUTE_HANDLER_TIMEOUT - 10_000; // 9 minutes 50 seconds +const CONNECTOR_TIMEOUT = LANG_CHAIN_TIMEOUT - 10_000; // 9 minutes 40 seconds + export const postAttackDiscoveryRoute = ( router: IRouter ) => { @@ -33,6 +37,9 @@ export const postAttackDiscoveryRoute = ( path: ATTACK_DISCOVERY, options: { tags: ['access:elasticAssistant'], + timeout: { + idleSocket: ROUTE_HANDLER_TIMEOUT, + }, }, }) .addVersion( @@ -109,6 +116,7 @@ export const postAttackDiscoveryRoute = ( logger, request, temperature: 0, // zero temperature for attack discovery, because we want structured JSON output + timeout: CONNECTOR_TIMEOUT, traceOptions, }); @@ -117,6 +125,7 @@ export const postAttackDiscoveryRoute = ( anonymizationFields, esClient, latestReplacements, + langChainTimeout: LANG_CHAIN_TIMEOUT, llm, onNewReplacements, request, diff --git a/x-pack/plugins/elastic_assistant/server/types.ts b/x-pack/plugins/elastic_assistant/server/types.ts index 063573be37c3e..63b62e8943c20 100755 --- a/x-pack/plugins/elastic_assistant/server/types.ts +++ b/x-pack/plugins/elastic_assistant/server/types.ts @@ -211,6 +211,7 @@ export interface AssistantToolParams { isEnabledKnowledgeBase: boolean; chain?: RetrievalQAChain; esClient: ElasticsearchClient; + langChainTimeout?: number; llm?: ActionsClientLlm | ActionsClientChatOpenAI; modelExists: boolean; onNewReplacements?: (newReplacements: Replacements) => void; diff --git a/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/details_flyout.tsx b/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/details_flyout.tsx index 3ba705cc87eb1..fb266b16211cb 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/details_flyout.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/details_flyout.tsx @@ -221,7 +221,12 @@ export const PipelineDetailsFlyout: FunctionComponent = ({ - + {i18n.translate('xpack.ingestPipelines.list.pipelineDetails.closeButtonLabel', { defaultMessage: 'Close', })} diff --git a/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/main.tsx b/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/main.tsx index 901b8c78a4eee..886bfcf8b9029 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/main.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/main.tsx @@ -26,14 +26,13 @@ import { import { Pipeline } from '../../../../common/types'; import { useKibana, SectionLoading } from '../../../shared_imports'; import { UIM_PIPELINES_LIST_LOAD } from '../../constants'; -import { getEditPath, getClonePath, getListPath } from '../../services/navigation'; +import { getEditPath, getClonePath } from '../../services/navigation'; import { EmptyList } from './empty_list'; import { PipelineTable } from './table'; import { PipelineDetailsFlyout } from './details_flyout'; import { PipelineNotFoundFlyout } from './not_found_flyout'; import { PipelineDeleteModal } from './delete_modal'; -import { useRedirectToPathOrRedirectPath } from '../../hooks'; const getPipelineNameFromLocation = (location: Location) => { const { pipeline } = parse(location.search.substring(1)); @@ -54,7 +53,6 @@ export const PipelinesList: React.FunctionComponent = ({ const [pipelinesToDelete, setPipelinesToDelete] = useState([]); const { data, isLoading, error, resendRequest } = services.api.useLoadPipelines(); - const redirectToPathOrRedirectPath = useRedirectToPathOrRedirectPath(history); // Track component loaded useEffect(() => { @@ -82,7 +80,17 @@ export const PipelinesList: React.FunctionComponent = ({ const goHome = () => { setShowFlyout(false); - redirectToPathOrRedirectPath(getListPath()); + + // When redirecting the user to the list of pipelines, we want to only clean + // up the pipeline query param as there might be other query params (for example: + // search or filters) that we want to keep. + const params = new URLSearchParams(history.location.search); + params.delete('pipeline'); + + history.push({ + pathname: '', + search: params.toString(), + }); }; if (error) { diff --git a/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/serializers.test.tsx b/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/serializers.test.tsx new file mode 100644 index 0000000000000..fb0d16d3b5e7f --- /dev/null +++ b/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/serializers.test.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 { EuiSelectableOption } from '@elastic/eui'; +import { serializeFilterOptions, deserializeFilterOptions } from './table'; + +describe('Query param serialization', () => { + it('knows how to serialize a set of options', () => { + expect( + serializeFilterOptions([ + { key: 'deprecated', checked: 'on' }, + { key: 'managed', checked: 'off' }, + { key: 'test' }, + ] as EuiSelectableOption[]) + ).toStrictEqual({ + deprecated: 'on', + managed: 'off', + test: 'unset', + }); + }); + + it('knows how to deserialize a set of filter query params', () => { + expect( + deserializeFilterOptions({ + managed: 'on', + deprecated: 'off', + }) + ).toStrictEqual([ + { key: 'managed', checked: 'on', label: 'Managed', 'data-test-subj': 'managedFilter' }, + { + key: 'deprecated', + checked: 'off', + label: 'Deprecated', + 'data-test-subj': 'deprecatedFilter', + }, + ]); + }); +}); diff --git a/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/table.tsx b/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/table.tsx index 8c50cc885e073..557c3794a1583 100644 --- a/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/table.tsx +++ b/x-pack/plugins/ingest_pipelines/public/application/sections/pipelines_list/table.tsx @@ -5,9 +5,12 @@ * 2.0. */ -import React, { FunctionComponent, useState, useMemo } from 'react'; +import React, { FunctionComponent, useState, useMemo, useEffect } from 'react'; +import qs from 'query-string'; import { i18n } from '@kbn/i18n'; +import { isEmpty, omit } from 'lodash'; import { FormattedMessage } from '@kbn/i18n-react'; + import { EuiInMemoryTable, EuiLink, @@ -60,6 +63,44 @@ const managedFilterLabel = i18n.translate('xpack.ingestPipelines.list.table.mana defaultMessage: 'Managed', }); +const defaultFilterOptions: EuiSelectableOption[] = [ + { key: 'managed', label: managedFilterLabel, 'data-test-subj': 'managedFilter' }, + { + key: 'deprecated', + label: deprecatedFilterLabel, + checked: 'off', + 'data-test-subj': 'deprecatedFilter', + }, +]; + +interface FilterQueryParams { + [key: string]: 'unset' | 'on' | 'off'; +} + +export function serializeFilterOptions(options: EuiSelectableOption[]) { + return options.reduce((list, option) => { + return { + ...list, + [option.key as string]: option.checked ?? 'unset', + }; + }, {}) as FilterQueryParams; +} + +export function deserializeFilterOptions(options: FilterQueryParams) { + return defaultFilterOptions.map((filter: EuiSelectableOption) => { + const filterKey = filter.key ? filter.key : ''; + return { + // Ignore checked property when setting as we are going to handle that separately + ...omit(filter, ['checked']), + ...(options[filterKey] === 'unset' ? {} : { checked: options[filterKey] }), + }; + }) as EuiSelectableOption[]; +} + +function isDefaultFilterOptions(options: FilterQueryParams) { + return options.managed === 'unset' && options.deprecated === 'off'; +} + export const PipelineTable: FunctionComponent = ({ pipelines, isLoading, @@ -68,15 +109,20 @@ export const PipelineTable: FunctionComponent = ({ onClonePipelineClick, onDeletePipelineClick, }) => { - const [filterOptions, setFilterOptions] = useState([ - { key: 'managed', label: managedFilterLabel }, - { key: 'deprecated', label: deprecatedFilterLabel, checked: 'off' }, - ]); + const [queryText, setQueryText] = useState(''); + const [filterOptions, setFilterOptions] = useState(defaultFilterOptions); + const { history } = useKibana().services; const [selection, setSelection] = useState([]); const filteredPipelines = useMemo(() => { - return (pipelines || []).filter((pipeline) => { + // Filter pipelines list by whatever the user entered in the search bar + const pipelinesAfterSearch = (pipelines || []).filter((pipeline) => { + return pipeline.name.toLowerCase().includes(queryText.toLowerCase()); + }); + + // Then filter those results down with the selected options from the filter dropdown + return pipelinesAfterSearch.filter((pipeline) => { const deprecatedFilter = filterOptions.find(({ key }) => key === 'deprecated')?.checked; const managedFilter = filterOptions.find(({ key }) => key === 'managed')?.checked; return !( @@ -86,7 +132,56 @@ export const PipelineTable: FunctionComponent = ({ (managedFilter === 'on' && !pipeline.isManaged) ); }); - }, [pipelines, filterOptions]); + }, [pipelines, filterOptions, queryText]); + + // This effect will run once only to update the initial state of the filters + // and queryText based on whatever is set in the query params. + useEffect(() => { + const { + queryText: searchQuery, + deprecated, + managed, + } = qs.parse(history?.location?.search || ''); + + if (searchQuery) { + setQueryText(searchQuery as string); + } + if (deprecated && managed) { + setFilterOptions( + deserializeFilterOptions({ + deprecated, + managed, + } as FilterQueryParams) + ); + } + }, [history]); + + useEffect(() => { + const serializedFilterOptions = serializeFilterOptions(filterOptions); + const isQueryEmpty = isEmpty(queryText); + const isDefaultFilters = isDefaultFilterOptions(serializedFilterOptions); + const isDefaultFilterConfiguration = isQueryEmpty && isDefaultFilters; + + // When the default filters are set, clear them up from the url + if (isDefaultFilterConfiguration) { + history.push(''); + } else { + // Otherwise, we can go ahead and update the query params with whatever + // the user has set. + history.push({ + pathname: '', + search: + '?' + + qs.stringify( + { + ...(!isQueryEmpty ? { queryText } : {}), + ...(!isDefaultFilters ? serializedFilterOptions : {}), + }, + { strict: false, arrayFormat: 'index' } + ), + }); + } + }, [history, queryText, filterOptions]); const [isPopoverOpen, setIsPopoverOpen] = useState(false); const onButtonClick = () => { @@ -100,6 +195,7 @@ export const PipelineTable: FunctionComponent = ({ item.checked !== 'off').length} @@ -130,6 +226,12 @@ export const PipelineTable: FunctionComponent = ({ }; }, search: { + query: queryText, + onChange: ({ queryText: searchText, error }) => { + if (!error) { + setQueryText(searchText); + } + }, toolsLeft: selection.length > 0 ? ( = ({ defaultMessage: 'Name', }), sortable: true, - render: (name: string) => ( - - {name} - - ), + render: (name: string) => { + const currentSearch = history.location.search; + const prependSearch = isEmpty(currentSearch) ? '?' : `${currentSearch}&`; + + return ( + + {name} + + ); + }, }, { width: '100px', diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/index.tsx b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/index.tsx index 27e132f0e43eb..7bea5746e461f 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/index.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/index.tsx @@ -12,13 +12,10 @@ import { ALERT_END, ALERT_EVALUATION_THRESHOLD, ALERT_EVALUATION_VALUE, - ALERT_INSTANCE_ID, ALERT_RULE_TYPE_ID, - ALERT_RULE_UUID, ALERT_START, } from '@kbn/rule-data-utils'; -import moment from 'moment'; -import React, { useEffect, useMemo } from 'react'; +import React, { useEffect } from 'react'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { getPaddedAlertTimeRange } from '@kbn/observability-get-padded-alert-time-range-util'; import { EuiCallOut } from '@elastic/eui'; @@ -34,7 +31,6 @@ import { TimeRangeMetadataContextProvider } from '../../../../context/time_range import { getComparisonChartTheme } from '../../../shared/time_comparison/get_comparison_chart_theme'; import FailedTransactionChart from './failed_transaction_chart'; import { getAggsTypeFromRule } from './helpers'; -import { LatencyAlertsHistoryChart } from './latency_alerts_history_chart'; import LatencyChart from './latency_chart'; import ThroughputChart from './throughput_chart'; import { AlertDetailsAppSectionProps } from './types'; @@ -125,12 +121,6 @@ export function AlertDetailsAppSection({ const latencyAggregationType = getAggsTypeFromRule(params.aggregationType); const timeRange = getPaddedAlertTimeRange(alert.fields[ALERT_START]!, alert.fields[ALERT_END]); const comparisonChartTheme = getComparisonChartTheme(); - const historicalRange = useMemo(() => { - return { - start: moment().subtract(30, 'days').toISOString(), - end: moment().toISOString(), - }; - }, []); const { from, to } = timeRange; if (!from || !to) { @@ -206,20 +196,6 @@ export function AlertDetailsAppSection({ /> - - - diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_alerts_history_chart.tsx b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_alerts_history_chart.tsx deleted file mode 100644 index 75a5a7dc0e4da..0000000000000 --- a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_alerts_history_chart.tsx +++ /dev/null @@ -1,280 +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 { AnnotationDomainType, LineAnnotation, Position } from '@elastic/charts'; -import { - EuiBadge, - EuiFlexGroup, - EuiFlexItem, - EuiIcon, - EuiLoadingSpinner, - EuiPanel, - EuiSpacer, - EuiText, - EuiTitle, -} from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { convertTo } from '@kbn/observability-plugin/public'; -import { AlertConsumers } from '@kbn/rule-data-utils'; -import moment from 'moment'; -import React, { useMemo } from 'react'; -import { useAlertsHistory } from '@kbn/observability-alert-details'; -import { useKibana } from '@kbn/kibana-react-plugin/public'; -import { ApmDocumentType } from '../../../../../common/document_type'; -import { LatencyAggregationType } from '../../../../../common/latency_aggregation_types'; -import { getDurationFormatter } from '../../../../../common/utils/formatters'; -import { useFetcher } from '../../../../hooks/use_fetcher'; -import { usePreferredDataSourceAndBucketSize } from '../../../../hooks/use_preferred_data_source_and_bucket_size'; -import { getLatencyChartSelector } from '../../../../selectors/latency_chart_selectors'; -import { filterNil } from '../../../shared/charts/latency_chart'; -import { TimeseriesChart } from '../../../shared/charts/timeseries_chart'; -import { - getMaxY, - getResponseTimeTickFormatter, -} from '../../../shared/charts/transaction_charts/helper'; -import { CHART_ANNOTATION_RED_COLOR } from './constants'; - -interface LatencyAlertsHistoryChartProps { - serviceName: string; - start: string; - end: string; - transactionType?: string; - transactionName?: string; - latencyAggregationType: LatencyAggregationType; - environment: string; - timeZone: string; - ruleId: string; - alertInstanceId?: string; -} -export function LatencyAlertsHistoryChart({ - serviceName, - start, - end, - transactionType, - transactionName, - latencyAggregationType, - environment, - timeZone, - ruleId, - alertInstanceId, -}: LatencyAlertsHistoryChartProps) { - const preferred = usePreferredDataSourceAndBucketSize({ - start, - end, - kuery: '', - numBuckets: 100, - // ServiceTransactionMetric does not have transactionName as a dimension, but it is faster than TransactionMetric - // We use TransactionMetric only when there is a transactionName - type: transactionName - ? ApmDocumentType.TransactionMetric - : ApmDocumentType.ServiceTransactionMetric, - }); - const { http, notifications } = useKibana().services; - const { data, status } = useFetcher( - (callApmApi) => { - if (serviceName && start && end && transactionType && latencyAggregationType && preferred) { - return callApmApi(`GET /internal/apm/services/{serviceName}/transactions/charts/latency`, { - params: { - path: { serviceName }, - query: { - environment, - kuery: '', - start, - end, - transactionType, - transactionName, - latencyAggregationType, - bucketSizeInSeconds: preferred.bucketSizeInSeconds, - documentType: preferred.source.documentType, - rollupInterval: preferred.source.rollupInterval, - useDurationSummary: - preferred.source.hasDurationSummaryField && - latencyAggregationType === LatencyAggregationType.avg, - }, - }, - }); - } - }, - [ - end, - environment, - latencyAggregationType, - serviceName, - start, - transactionName, - transactionType, - preferred, - ] - ); - const memoizedData = useMemo( - () => - getLatencyChartSelector({ - latencyChart: data, - latencyAggregationType, - previousPeriodLabel: '', - }), - // It should only update when the data has changed - // eslint-disable-next-line react-hooks/exhaustive-deps - [data] - ); - - const { currentPeriod, previousPeriod } = memoizedData; - const timeseriesLatency = [currentPeriod, previousPeriod].filter(filterNil); - const latencyMaxY = getMaxY(timeseriesLatency); - const latencyFormatter = getDurationFormatter(latencyMaxY); - const { - data: { totalTriggeredAlerts, avgTimeToRecoverUS, histogramTriggeredAlerts }, - isError, - isLoading, - } = useAlertsHistory({ - http, - featureIds: [AlertConsumers.APM], - ruleId, - dateRange: { from: start, to: end }, - instanceId: alertInstanceId, - }); - - if (isError) { - notifications?.toasts.addDanger({ - title: i18n.translate('xpack.apm.alertDetails.latencyAlertHistoryChart.error.toastTitle', { - defaultMessage: 'Latency alerts history chart error', - }), - text: i18n.translate( - 'xpack.apm.alertDetails.latencyAlertHistoryChart.error.toastDescription', - { - defaultMessage: `An error occurred when fetching latency alert history chart data for {serviceName}`, - values: { serviceName }, - } - ), - }); - } - - return ( - - - - -

- {serviceName} - {i18n.translate('xpack.apm.latencyChartHistory.chartTitle', { - defaultMessage: ' latency alerts history', - })} -

-
-
- - - {i18n.translate('xpack.apm.latencyChartHistory.last30days', { - defaultMessage: 'Last 30 days', - })} - - -
- - - - - - - - -

- {isLoading ? : totalTriggeredAlerts || '-'} -

-
-
-
- - - {i18n.translate('xpack.apm.latencyChartHistory.alertsTriggered', { - defaultMessage: 'Alerts triggered', - })} - - -
-
- - - - -

- {isLoading ? ( - - ) : avgTimeToRecoverUS ? ( - convertTo({ - unit: 'minutes', - microseconds: avgTimeToRecoverUS, - extended: true, - }).formatted - ) : ( - '-' - )} -

-
-
-
- - - {i18n.translate('xpack.apm.latencyChartHistory.avgTimeToRecover', { - defaultMessage: 'Avg time to recover', - })} - - -
-
- - - annotation.doc_count > 0) - .map((annotation) => { - return { - dataValue: annotation.key, - header: String(annotation.doc_count), - details: moment(annotation.key_as_string).format('yyyy-MM-DD'), - }; - }) || [] - } - style={{ - line: { - strokeWidth: 3, - stroke: CHART_ANNOTATION_RED_COLOR, - opacity: 1, - }, - }} - marker={} - markerBody={(annotationData) => ( - <> - - - {annotationData.header} - - - - - )} - markerPosition={Position.Top} - />, - ]} - height={200} - comparisonEnabled={false} - offset={''} - fetchStatus={status} - timeseries={timeseriesLatency} - yLabelFormat={getResponseTimeTickFormatter(latencyFormatter)} - timeZone={timeZone} - /> -
- ); -} diff --git a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_chart.tsx b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_chart.tsx index 1af7bb492a04c..0f303a676c6a6 100644 --- a/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_chart.tsx +++ b/x-pack/plugins/observability_solution/apm/public/components/alerting/ui_components/alert_details_app_section/latency_chart.tsx @@ -4,8 +4,9 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ + import { Theme } from '@elastic/charts'; -import { RecursivePartial, transparentize } from '@elastic/eui'; +import { RecursivePartial } from '@elastic/eui'; import React, { useMemo } from 'react'; import { EuiFlexItem, EuiPanel, EuiFlexGroup, EuiTitle } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -23,7 +24,6 @@ import { useEuiTheme } from '@elastic/eui'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import { UI_SETTINGS } from '@kbn/data-plugin/public'; import moment from 'moment'; -import chroma from 'chroma-js'; import { filterNil } from '../../../shared/charts/latency_chart'; import { LatencyAggregationTypeSelect } from '../../../shared/charts/latency_chart/latency_aggregation_type_select'; import { TimeseriesChart } from '../../../shared/charts/timeseries_chart'; @@ -163,7 +163,7 @@ function LatencyChart({ , diff --git a/x-pack/plugins/observability_solution/infra/common/http_api/metrics_explorer.ts b/x-pack/plugins/observability_solution/infra/common/http_api/metrics_explorer.ts index d735e398e6661..4f1ea80a1a34f 100644 --- a/x-pack/plugins/observability_solution/infra/common/http_api/metrics_explorer.ts +++ b/x-pack/plugins/observability_solution/infra/common/http_api/metrics_explorer.ts @@ -91,6 +91,7 @@ export const afterKeyObjectRT = rt.record(rt.string, rt.union([rt.string, rt.nul export const metricsExplorerRequestBodyOptionalFieldsRT = rt.partial({ groupBy: rt.union([groupByRT, rt.array(groupByRT)]), + groupInstance: rt.union([groupByRT, rt.array(groupByRT)]), afterKey: rt.union([rt.string, rt.null, rt.undefined, afterKeyObjectRT]), limit: rt.union([rt.number, rt.null, rt.undefined]), filterQuery: rt.union([rt.string, rt.null, rt.undefined]), diff --git a/x-pack/plugins/observability_solution/infra/common/metrics_explorer_views/types.ts b/x-pack/plugins/observability_solution/infra/common/metrics_explorer_views/types.ts index 46e18753c8a6f..1c1bc4103bc66 100644 --- a/x-pack/plugins/observability_solution/infra/common/metrics_explorer_views/types.ts +++ b/x-pack/plugins/observability_solution/infra/common/metrics_explorer_views/types.ts @@ -69,6 +69,7 @@ export const metricExplorerOptionsRequiredRT = rt.type({ export const metricExplorerOptionsOptionalRT = rt.partial({ limit: rt.number, groupBy: rt.union([rt.string, rt.array(rt.string)]), + groupInstance: rt.union([rt.string, rt.array(rt.string)]), filterQuery: rt.string, source: rt.string, forceInterval: rt.boolean, diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/components/logs_history_chart.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/components/logs_history_chart.tsx deleted file mode 100644 index e303897eb6557..0000000000000 --- a/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/components/logs_history_chart.tsx +++ /dev/null @@ -1,205 +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 moment from 'moment'; -import React from 'react'; -import { Rule } from '@kbn/alerting-plugin/common'; -import { - EuiPanel, - EuiFlexGroup, - EuiFlexItem, - EuiTitle, - EuiText, - EuiSpacer, - EuiLoadingSpinner, -} from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { convertTo } from '@kbn/observability-plugin/public'; -import { AnnotationDomainType, LineAnnotation, Position } from '@elastic/charts'; -import { EuiIcon, EuiBadge } from '@elastic/eui'; -import { euiThemeVars } from '@kbn/ui-theme'; -import { AlertConsumers } from '@kbn/rule-data-utils'; -import DateMath from '@kbn/datemath'; -import { useAlertsHistory } from '@kbn/observability-alert-details'; -import { useKibanaContextForPlugin } from '../../../../../hooks/use_kibana'; -import { type PartialCriterion } from '../../../../../../common/alerting/logs/log_threshold'; -import { CriterionPreview } from '../../expression_editor/criterion_preview_chart'; -import { PartialRuleParams } from '../../../../../../common/alerting/logs/log_threshold'; -import type { Group } from '../types'; - -const LogsHistoryChart = ({ - rule, - instanceId, - groups, -}: { - rule: Rule; - instanceId?: string; - groups?: Group[]; -}) => { - const { http, notifications } = useKibanaContextForPlugin().services; - // Show the Logs History Chart ONLY if we have one criteria - // So always pull the first criteria - const criteria = rule.params.criteria[0]; - - const dateRange = { - from: 'now-30d', - to: 'now', - }; - const executionTimeRange = { - gte: DateMath.parse(dateRange.from)!.valueOf(), - lte: DateMath.parse(dateRange.to, { roundUp: true })!.valueOf(), - buckets: 30, - }; - - const { - data: { histogramTriggeredAlerts, avgTimeToRecoverUS, totalTriggeredAlerts }, - isLoading, - isError, - } = useAlertsHistory({ - http, - featureIds: [AlertConsumers.LOGS], - ruleId: rule.id, - dateRange, - instanceId, - }); - - if (isError) { - notifications?.toasts.addDanger({ - title: i18n.translate('xpack.infra.alertDetails.logsAlertHistoryChart.error.toastTitle', { - defaultMessage: 'Logs alerts history chart error', - }), - text: i18n.translate( - 'xpack.infra.alertDetails.logsAlertHistoryChart.error.toastDescription', - { - defaultMessage: `An error occurred when fetching logs alert history chart data`, - } - ), - }); - } - const alertHistoryAnnotations = - histogramTriggeredAlerts - ?.filter((annotation) => annotation.doc_count > 0) - .map((annotation) => { - return { - dataValue: annotation.key, - header: String(annotation.doc_count), - // Only the date(without time) is needed here, uiSettings don't provide that - details: moment(annotation.key_as_string).format('yyyy-MM-DD'), - }; - }) || []; - - return ( - - - - -

- {i18n.translate('xpack.infra.logs.alertDetails.chartHistory.chartTitle', { - defaultMessage: 'Logs threshold alerts history', - })} -

-
-
- - - {i18n.translate('xpack.infra.logs.alertDetails.chartHistory.last30days', { - defaultMessage: 'Last 30 days', - })} - - -
- - - - - - - -

- {isLoading ? : totalTriggeredAlerts || '-'} -

-
-
-
- - - {i18n.translate('xpack.infra.logs.alertDetails.chartHistory.alertsTriggered', { - defaultMessage: 'Alerts triggered', - })} - - -
-
- - - - -

- {isLoading ? ( - - ) : avgTimeToRecoverUS ? ( - convertTo({ - unit: 'minutes', - microseconds: avgTimeToRecoverUS, - extended: true, - }).formatted - ) : ( - '-' - )} -

-
-
-
- - - {i18n.translate('xpack.infra.logs.alertDetails.chartHistory.avgTimeToRecover', { - defaultMessage: 'Avg time to recover', - })} - - -
-
- - } - markerBody={(annotationData) => ( - <> - - - {annotationData.header} - - - - - )} - markerPosition={Position.Top} - />, - ]} - ruleParams={{ ...rule.params, timeSize: 1, timeUnit: 'd' }} - logViewReference={rule.params.logView} - chartCriterion={criteria as PartialCriterion} - showThreshold={true} - executionTimeRange={executionTimeRange} - filterSeriesByGroupName={groups?.map((group) => group.value).join(', ')} - /> -
- ); -}; -// eslint-disable-next-line import/no-default-export -export default LogsHistoryChart; diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx index 67111c7bbbe61..a3a4895d4e9a3 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/log_threshold/components/alert_details_app_section/index.tsx @@ -12,7 +12,6 @@ import { ALERT_CONTEXT, ALERT_END, ALERT_EVALUATION_VALUE, - ALERT_INSTANCE_ID, ALERT_START, } from '@kbn/rule-data-utils'; import moment from 'moment'; @@ -35,9 +34,7 @@ import { Threshold } from '../../../common/components/threshold'; import { LogRateAnalysis } from './components/log_rate_analysis'; import { LogThresholdCountChart, LogThresholdRatioChart } from './components/threhsold_chart'; import { useLicense } from '../../../../hooks/use_license'; -import type { Group } from './types'; -const LogsHistoryChart = React.lazy(() => import('./components/logs_history_chart')); const formatThreshold = (threshold: number) => String(threshold); const AlertDetailsAppSection = ({ @@ -65,16 +62,6 @@ const AlertDetailsAppSection = ({ .filter(identity) .join(' AND ') : ''; - const groups: Group[] | undefined = rule.params.groupBy - ? rule.params.groupBy.flatMap((field) => { - const value: string = get( - alert.fields[ALERT_CONTEXT], - ['groupByKeys', ...field.split('.')], - null - ); - return value ? { field, value } : []; - }) - : undefined; const { derivedDataView } = useLogView({ initialLogViewReference: rule.params.logView, @@ -236,24 +223,6 @@ const AlertDetailsAppSection = ({ } else return null; }; - const getLogsHistoryChart = () => { - return ( - rule && - rule.params.criteria.length === 1 && ( - - - - ) - ); - }; - const getLogRateAnalysisSection = () => { return hasLicenseForLogRateAnalysis ? : null; }; @@ -263,7 +232,6 @@ const AlertDetailsAppSection = ({ {getLogRatioChart()} {getLogCountChart()} {getLogRateAnalysisSection()} - {getLogsHistoryChart()}
); }; 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 5ee10d2d3381e..0d63415081910 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 @@ -34,6 +34,9 @@ Array [ "groupBy": Array [ "host.hostname", ], + "groupInstance": Array [ + "host-1", + ], "hideTitle": true, "source": Object { "id": "default", 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 17aadc136b2bb..a9d5b2c2193fc 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 @@ -18,6 +18,8 @@ import { } from '../mocks/metric_threshold_rule'; import { AlertDetailsAppSection } from './alert_details_app_section'; import { ExpressionChart } from './expression_chart'; +import { Groups } from './groups'; +import { Tags } from './tags'; const mockedChartStartContract = chartPluginMock.createStartContract(); @@ -84,15 +86,32 @@ describe('AlertDetailsAppSection', () => { expect(result.getByTestId('threshold-2000-2500')).toBeTruthy(); }); - it('should render rule link', async () => { + it('should render alert summary fields', async () => { renderComponent(); expect(mockedSetAlertSummaryFields).toBeCalledTimes(1); expect(mockedSetAlertSummaryFields).toBeCalledWith([ + { + label: 'Source', + value: ( + + ), + }, + { + label: 'Tags', + value: , + }, { label: 'Rule', value: ( - + Monitoring hosts ), 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 6ededb941a589..27c61aa8c18ca 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 @@ -20,7 +20,13 @@ import { useEuiTheme, } from '@elastic/eui'; import { AlertSummaryField, TopAlert } from '@kbn/observability-plugin/public'; -import { ALERT_END, ALERT_START, ALERT_EVALUATION_VALUES } from '@kbn/rule-data-utils'; +import { + ALERT_END, + ALERT_START, + ALERT_EVALUATION_VALUES, + ALERT_GROUP, + TAGS, +} from '@kbn/rule-data-utils'; import { Rule } from '@kbn/alerting-plugin/common'; import { AlertAnnotation, AlertActiveTimeRangeAnnotation } from '@kbn/observability-alert-details'; import { getPaddedAlertTimeRange } from '@kbn/observability-get-padded-alert-time-range-util'; @@ -33,6 +39,8 @@ import { MetricsExplorerChartType } from '../../../pages/metrics/metrics_explore import { useKibanaContextForPlugin } from '../../../hooks/use_kibana'; import { MetricThresholdRuleTypeParams } from '..'; import { ExpressionChart } from './expression_chart'; +import { Groups } from './groups'; +import { Tags } from './tags'; // TODO Use a generic props for app sections https://github.com/elastic/kibana/issues/152690 export type MetricThresholdRule = Rule< @@ -41,7 +49,18 @@ export type MetricThresholdRule = Rule< groupBy?: string | string[]; } >; -export type MetricThresholdAlert = TopAlert; + +interface Group { + field: string; + value: string; +} + +interface MetricThresholdAlertField { + [ALERT_EVALUATION_VALUES]?: Array; + [ALERT_GROUP]?: Group[]; +} + +export type MetricThresholdAlert = TopAlert; const DEFAULT_DATE_FORMAT = 'YYYY-MM-DD HH:mm'; const ALERT_START_ANNOTATION_ID = 'alert_start_annotation'; @@ -63,6 +82,9 @@ export function AlertDetailsAppSection({ 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(), @@ -90,19 +112,36 @@ export function AlertDetailsAppSection({ />, ]; useEffect(() => { - setAlertSummaryFields([ - { - label: i18n.translate('xpack.infra.metrics.alertDetailsAppSection.summaryField.rule', { - defaultMessage: 'Rule', + const alertSummaryFields = []; + if (groups) { + alertSummaryFields.push({ + label: i18n.translate('xpack.infra.metrics.alertDetailsAppSection.summaryField.source', { + defaultMessage: 'Source', }), - value: ( - - {rule.name} - - ), - }, - ]); - }, [rule, ruleLink, setAlertSummaryFields]); + value: , + }); + } + if (tags && tags.length > 0) { + alertSummaryFields.push({ + label: i18n.translate('xpack.infra.metrics.alertDetailsAppSection.summaryField.tags', { + defaultMessage: 'Tags', + }), + value: , + }); + } + alertSummaryFields.push({ + label: i18n.translate('xpack.infra.metrics.alertDetailsAppSection.summaryField.rule', { + defaultMessage: 'Rule', + }), + value: ( + + {rule.name} + + ), + }); + + setAlertSummaryFields(alertSummaryFields); + }, [groups, tags, rule, ruleLink, setAlertSummaryFields]); return !!rule.params.criteria ? ( @@ -153,6 +192,7 @@ export function AlertDetailsAppSection({ expression={criterion} filterQuery={rule.params.filterQueryText} groupBy={rule.params.groupBy} + groupInstance={groupInstance} hideTitle source={source} timeRange={timeRange} diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression_chart.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression_chart.tsx index 8d4381a86572b..cdd8c8389427a 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression_chart.tsx +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/expression_chart.tsx @@ -55,6 +55,7 @@ interface Props { chartType?: MetricsExplorerChartType; filterQuery?: string; groupBy?: string | string[]; + groupInstance?: string | string[]; hideTitle?: boolean; source?: MetricsSourceConfiguration; timeRange?: TimeRange; @@ -67,6 +68,7 @@ export const ExpressionChart: React.FC = ({ chartType = MetricsExplorerChartType.bar, filterQuery, groupBy, + groupInstance, hideTitle = false, source, timeRange, @@ -80,6 +82,7 @@ export const ExpressionChart: React.FC = ({ source, filterQuery, groupBy, + groupInstance, timeRange ); @@ -200,6 +203,7 @@ export const ExpressionChart: React.FC = ({ externalPointerEvents={{ tooltip: { visible: true }, }} + theme={{ chartMargins: { top: 10 } }} baseTheme={chartTheme.baseTheme} locale={i18n.getLocale()} /> diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/groups.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/groups.tsx new file mode 100644 index 0000000000000..c68fa2a391448 --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/groups.tsx @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; + +export function Groups({ groups }: { groups: Array<{ field: string; value: string }> }) { + return ( + <> + {groups && + groups.map((group) => { + return ( + + {group.field}: {group.value} +
+
+ ); + })} + + ); +} diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/tags.tsx b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/tags.tsx new file mode 100644 index 0000000000000..6d5cb11a63b67 --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/components/tags.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 { i18n } from '@kbn/i18n'; +import React, { useState } from 'react'; +import { EuiBadge, EuiPopover } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; + +export function Tags({ tags }: { tags: string[] }) { + const [isMoreTagsOpen, setIsMoreTagsOpen] = useState(false); + const onMoreTagsClick = () => setIsMoreTagsOpen((isPopoverOpen) => !isPopoverOpen); + const closePopover = () => setIsMoreTagsOpen(false); + const moreTags = tags.length > 3 && ( + + + + ); + + return ( + <> + {tags.slice(0, 3).map((tag) => ( + {tag} + ))} +
+ + {tags.slice(3).map((tag) => ( + {tag} + ))} + + + ); +} 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 532e694896f18..79e2e4aec33da 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 @@ -26,6 +26,7 @@ export const useMetricsExplorerChartData = ( source?: MetricsSourceConfiguration, filterQuery?: string, groupBy?: string | string[], + groupInstance?: string | string[], timeRange: TimeRange = DEFAULT_TIME_RANGE ) => { const { timeSize, timeUnit } = expression || { timeSize: 1, timeUnit: 'm' }; @@ -36,6 +37,7 @@ export const useMetricsExplorerChartData = ( forceInterval: true, dropLastBucket: false, groupBy, + groupInstance, filterQuery, metrics: [ expression.aggType === 'custom' @@ -57,6 +59,7 @@ export const useMetricsExplorerChartData = ( expression.customMetrics, filterQuery, groupBy, + groupInstance, ] ); const timestamps: MetricsExplorerTimestamp = useMemo(() => { diff --git a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/mocks/metric_threshold_rule.ts b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/mocks/metric_threshold_rule.ts index 812a8864cffd7..ed0d4444f023a 100644 --- a/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/mocks/metric_threshold_rule.ts +++ b/x-pack/plugins/observability_solution/infra/public/alerting/metric_threshold/mocks/metric_threshold_rule.ts @@ -153,6 +153,7 @@ export const buildMetricThresholdAlert = ( alertOnGroupDisappear: true, }, 'kibana.alert.evaluation.values': [2500, 5], + 'kibana.alert.group': [{ field: 'host.name', value: 'host-1' }], 'kibana.alert.rule.category': 'Metric threshold', 'kibana.alert.rule.consumer': 'alerts', 'kibana.alert.rule.execution.uuid': '62dd07ef-ead9-4b1f-a415-7c83d03925f7', @@ -165,7 +166,7 @@ export const buildMetricThresholdAlert = ( '@timestamp': '2023-03-28T14:40:00.000Z', 'kibana.alert.reason': 'system.cpu.user.pct reported no data in the last 1m for ', 'kibana.alert.action_group': 'metrics.threshold.nodata', - tags: [], + tags: ['tag 1', 'tag 2'], 'kibana.alert.duration.us': 248391946000, 'kibana.alert.time_range': { gte: '2023-03-13T14:06:23.695Z', diff --git a/x-pack/plugins/observability_solution/infra/public/common/asset_details_config/asset_details_tabs.tsx b/x-pack/plugins/observability_solution/infra/public/common/asset_details_config/asset_details_tabs.tsx index d43ab65832271..1383e1c49915e 100644 --- a/x-pack/plugins/observability_solution/infra/public/common/asset_details_config/asset_details_tabs.tsx +++ b/x-pack/plugins/observability_solution/infra/public/common/asset_details_config/asset_details_tabs.tsx @@ -10,76 +10,107 @@ import { i18n } from '@kbn/i18n'; import React from 'react'; import { ContentTabIds, type Tab } from '../../components/asset_details/types'; -export const commonFlyoutTabs: Tab[] = [ - { - id: ContentTabIds.OVERVIEW, - name: i18n.translate('xpack.infra.assetDetails.tabs.overview', { - defaultMessage: 'Overview', - }), - }, - { - id: ContentTabIds.METADATA, - name: i18n.translate('xpack.infra.assetDetails.tabs.metadata', { - defaultMessage: 'Metadata', - }), - }, - { - id: ContentTabIds.METRICS, - name: i18n.translate('xpack.infra.assetDetails.tabs.metrics', { - defaultMessage: 'Metrics', - }), - }, - { - id: ContentTabIds.PROCESSES, - name: i18n.translate('xpack.infra.assetDetails.tabs.processes', { - defaultMessage: 'Processes', - }), - }, - { - id: ContentTabIds.PROFILING, - name: i18n.translate('xpack.infra.assetDetails.tabs.profiling', { - defaultMessage: 'Universal Profiling', - }), - }, - { - id: ContentTabIds.LOGS, - name: i18n.translate('xpack.infra.assetDetails.tabs.logs', { - defaultMessage: 'Logs', - }), - }, - { - id: ContentTabIds.ANOMALIES, - name: i18n.translate('xpack.infra.assetDetails.tabs.anomalies', { - defaultMessage: 'Anomalies', - }), - }, - { - id: ContentTabIds.OSQUERY, - name: i18n.translate('xpack.infra.assetDetails.tabs.osquery', { - defaultMessage: 'Osquery', - }), - }, - { - id: ContentTabIds.DASHBOARDS, - name: i18n.translate('xpack.infra.infra.nodeDetails.tabs.dashboards', { - defaultMessage: 'Dashboards', - }), - append: ( - - ), - }, +const overviewTab: Tab = { + id: ContentTabIds.OVERVIEW, + name: i18n.translate('xpack.infra.nodeDetails.tabs.overview.title', { + defaultMessage: 'Overview', + }), +}; + +const metadataTab: Tab = { + id: ContentTabIds.METADATA, + name: i18n.translate('xpack.infra.nodeDetails.tabs.metadata.title', { + defaultMessage: 'Metadata', + }), +}; + +const metricsTab: Tab = { + id: ContentTabIds.METRICS, + name: i18n.translate('xpack.infra.nodeDetails.tabs.metrics.title', { + defaultMessage: 'Metrics', + }), +}; + +const processesTab: Tab = { + id: ContentTabIds.PROCESSES, + name: i18n.translate('xpack.infra.metrics.nodeDetails.tabs.processes', { + defaultMessage: 'Processes', + }), +}; + +const profilingTab: Tab = { + id: ContentTabIds.PROFILING, + name: i18n.translate('xpack.infra.metrics.nodeDetails.tabs.profiling', { + defaultMessage: 'Universal Profiling', + }), +}; + +const logsTab: Tab = { + id: ContentTabIds.LOGS, + name: i18n.translate('xpack.infra.nodeDetails.tabs.logs.title', { + defaultMessage: 'Logs', + }), +}; + +const anomaliesTab: Tab = { + id: ContentTabIds.ANOMALIES, + name: i18n.translate('xpack.infra.nodeDetails.tabs.anomalies', { + defaultMessage: 'Anomalies', + }), +}; + +const osqueryTab: Tab = { + id: ContentTabIds.OSQUERY, + name: i18n.translate('xpack.infra.nodeDetails.tabs.osquery', { + defaultMessage: 'Osquery', + }), +}; + +const dashboardsTab: Tab = { + id: ContentTabIds.DASHBOARDS, + name: i18n.translate('xpack.infra.infra.nodeDetails.tabs.dashboards', { + defaultMessage: 'Dashboards', + }), + append: ( + + ), +}; + +export const hostDetailsTabs: Tab[] = [ + overviewTab, + metadataTab, + metricsTab, + processesTab, + profilingTab, + logsTab, + anomaliesTab, + osqueryTab, + dashboardsTab, ]; +// Profiling and Logs tab would be added in next iteration +export const containerDetailsTabs: Tab[] = [overviewTab, metadataTab]; + +export const getAssetDetailsTabs = (type: string): Tab[] => { + switch (type) { + case 'host': + return hostDetailsTabs; + case 'container': + return containerDetailsTabs; + default: + return []; + } +}; diff --git a/x-pack/plugins/observability_solution/infra/public/common/visualizations/constants.ts b/x-pack/plugins/observability_solution/infra/public/common/visualizations/constants.ts index 76b2eb7c3d70f..959ff1145f7d4 100644 --- a/x-pack/plugins/observability_solution/infra/public/common/visualizations/constants.ts +++ b/x-pack/plugins/observability_solution/infra/public/common/visualizations/constants.ts @@ -7,6 +7,7 @@ export const HOST_METRICS_DOC_HREF = 'https://ela.st/docs-infra-host-metrics'; export const HOST_METRICS_DOTTED_LINES_DOC_HREF = 'https://ela.st/docs-infra-why-dotted'; +export const CONTAINER_METRICS_DOC_HREF = 'https://ela.st/docs-infra-docker-container-metrics'; export const KPI_CHART_HEIGHT = 150; export const METRIC_CHART_HEIGHT = 300; 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 a1edbfa327a4b..f1ccf0ef31b2b 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 @@ -10,7 +10,7 @@ import type { LensConfig, LensDataviewDataset } from '@kbn/lens-embeddable-utils import type { TimeRange } from '@kbn/es-query'; import { useDataView } from '../../../hooks/use_data_view'; import { METRIC_CHART_HEIGHT } from '../../../common/visualizations/constants'; -import { buildCombinedHostsFilter } from '../../../utils/filters/build'; +import { buildCombinedAssetFilter } from '../../../utils/filters/build'; import { type BrushEndArgs, LensChart, type OnFilterEvent, LensChartProps } from '../../lens'; import { useDatePickerContext } from '../hooks/use_date_picker'; import { extractRangeFromChartFilterEvent } from './chart_utils'; @@ -31,7 +31,7 @@ export const Chart = ({ id, queryField, overrides, dateRange, assetId, ...props const filters = useMemo(() => { return [ - buildCombinedHostsFilter({ + buildCombinedAssetFilter({ field: queryField, values: [assetId], dataView, diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/docker_charts.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/docker_charts.tsx new file mode 100644 index 0000000000000..795a66b5a2e80 --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/docker_charts.tsx @@ -0,0 +1,87 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { findInventoryFields } from '@kbn/metrics-data-access-plugin/common'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { css, cx } from '@emotion/css'; +import { EuiText, EuiLink } from '@elastic/eui'; +import { useDockerContainerPageViewMetricsCharts } from '../hooks/use_container_metrics_charts'; +import { Section } from '../components/section'; +import { ChartsGrid } from '../charts_grid/charts_grid'; +import { Chart } from './chart'; +import { TitleWithTooltip } from '../components/section_title'; +import { CONTAINER_METRIC_GROUP_TITLES } from '../translations'; +import { CONTAINER_METRICS_DOC_HREF } from '../../../common/visualizations/constants'; +import { MetricsChartsFields, ContainerMetricTypes } from './types'; + +interface Props extends MetricsChartsFields { + metric: ContainerMetricTypes; +} + +const FRAGMENT_BASE = 'key-metrics'; + +export const DockerCharts = React.forwardRef( + ({ assetId, dataView, dateRange, metric }, ref) => { + const { charts } = useDockerContainerPageViewMetricsCharts({ + metric, + metricsDataViewId: dataView?.id, + }); + return ( +
+ + + + ), + }} + /> + + } + /> + } + data-test-subj={`infraAssetDetailsDockerChartsSection${metric}`} + id="dockerContainerCharts" + ref={ref} + > + + {charts.map((chart) => ( + + ))} + +
+ ); + } +); diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/host_charts.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/host_charts.tsx index 79d225cd02882..d8d60deb81efb 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/host_charts.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/host_charts.tsx @@ -5,8 +5,6 @@ * 2.0. */ import React from 'react'; -import type { DataView } from '@kbn/data-views-plugin/public'; -import type { TimeRange } from '@kbn/es-query'; import { EuiText, EuiLink, EuiButtonEmpty } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { findInventoryFields } from '@kbn/metrics-data-access-plugin/common'; @@ -16,16 +14,12 @@ import { HOST_METRIC_GROUP_TITLES } from '../translations'; import { Section } from '../components/section'; import { ChartsGrid } from '../charts_grid/charts_grid'; import { Chart } from './chart'; -import { type HostMetricTypes, useHostCharts } from '../hooks/use_metrics_charts'; +import { useHostCharts } from '../hooks/use_host_metrics_charts'; import { TitleWithTooltip } from '../components/section_title'; +import { MetricsChartsFields, HostMetricTypes } from './types'; -interface Props { - assetId: string; - dateRange: TimeRange; - dataView?: DataView; - overview?: boolean; +interface Props extends MetricsChartsFields { metric: Exclude; - onShowAll?: (metric: string) => void; } const FRAGMENT_BASE = 'key-metrics'; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/index.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/index.tsx index 180a5558e29bd..c242cccdf952a 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/index.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/index.tsx @@ -6,4 +6,5 @@ */ export { HostCharts } from './host_charts'; -export { KubernetesCharts } from './kubernetes_charts'; +export { KubernetesNodeCharts, KubernetesContainerCharts } from './kubernetes_charts'; +export { DockerCharts } from './docker_charts'; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/kubernetes_charts.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/kubernetes_charts.tsx index 8791b351bf7e7..b386b1e9d8cbc 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/kubernetes_charts.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/kubernetes_charts.tsx @@ -5,66 +5,124 @@ * 2.0. */ import React from 'react'; -import { EuiButtonEmpty } from '@elastic/eui'; +import { EuiButtonEmpty, EuiText, EuiLink } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; -import type { TimeRange } from '@kbn/es-query'; -import type { DataView } from '@kbn/data-views-plugin/public'; +import { css, cx } from '@emotion/css'; import { findInventoryFields } from '@kbn/metrics-data-access-plugin/common'; -import { useKubernetesCharts } from '../hooks/use_metrics_charts'; +import { useKubernetesCharts } from '../hooks/use_host_metrics_charts'; import { Section } from '../components/section'; -import { SectionTitle } from '../components/section_title'; -import { HOST_METRIC_GROUP_TITLES } from '../translations'; +import { SectionTitle, TitleWithTooltip } from '../components/section_title'; +import { CONTAINER_METRIC_GROUP_TITLES, HOST_METRIC_GROUP_TITLES } from '../translations'; import { INTEGRATIONS } from '../constants'; import { ChartsGrid } from '../charts_grid/charts_grid'; import { Chart } from './chart'; import { useIntegrationCheck } from '../hooks/use_integration_check'; +import { useK8sContainerPageViewMetricsCharts } from '../hooks/use_container_metrics_charts'; +import { CONTAINER_METRICS_DOC_HREF } from '../../../common/visualizations/constants'; +import { ContainerMetricTypes, MetricsChartsFields } from './types'; -interface Props { - assetId: string; - dateRange: TimeRange; - dataView?: DataView; - overview?: boolean; - onShowAll?: (metric: string) => void; -} +const FRAGMENT_BASE = 'key-metrics'; -export const KubernetesCharts = React.forwardRef< - HTMLDivElement, - Props & { onShowAll?: (metric: string) => void } ->(({ assetId, dataView, dateRange, onShowAll, overview }, ref) => { - const { charts } = useKubernetesCharts({ - dataViewId: dataView?.id, - options: { overview }, - }); +export const KubernetesNodeCharts = React.forwardRef( + ({ assetId, dataView, dateRange, onShowAll, overview }, ref) => { + const { charts } = useKubernetesCharts({ + dataViewId: dataView?.id, + options: { overview }, + }); + + const hasIntegration = useIntegrationCheck({ dependsOn: INTEGRATIONS.kubernetesNode }); - const hasIntegration = useIntegrationCheck({ dependsOn: INTEGRATIONS.kubernetes }); + if (!hasIntegration) { + return null; + } - if (!hasIntegration) { - return null; + return ( +
} + data-test-subj="infraAssetDetailsKubernetesChartsSection" + id="kubernetes" + ref={ref} + extraAction={ + onShowAll ? ( + onShowAll('kubernetes')} + size="xs" + flush="both" + iconSide="right" + iconType="sortRight" + > + + + ) : null + } + > + + {charts.map((chart) => ( + + ))} + +
+ ); } +); +export const KubernetesContainerCharts = React.forwardRef< + HTMLDivElement, + MetricsChartsFields & { metric: ContainerMetricTypes } +>(({ assetId, dataView, dateRange, metric }, ref) => { + const { charts } = useK8sContainerPageViewMetricsCharts({ + metric, + metricsDataViewId: dataView?.id, + }); return (
} - data-test-subj="infraAssetDetailsKubernetesChartsSection" - id="kubernetes" - ref={ref} - extraAction={ - onShowAll ? ( - onShowAll('kubernetes')} - size="xs" - flush="both" - iconSide="right" - iconType="sortRight" - > - - - ) : null + title={ + + + + + ), + }} + /> + + } + /> } + data-test-subj="infraAssetDetailsK8ContainerChartsSection" + id="k8sContainerCharts" + ref={ref} > {charts.map((chart) => ( @@ -73,7 +131,7 @@ export const KubernetesCharts = React.forwardRef< {...chart} assetId={assetId} dateRange={dateRange} - queryField={findInventoryFields('host').id} + queryField={findInventoryFields('container').id} /> ))} diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/types.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/types.ts new file mode 100644 index 0000000000000..a01a5c7f7ced2 --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/charts/types.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { DataView } from '@kbn/data-views-plugin/public'; +import type { TimeRange } from '@kbn/es-query'; + +export type HostMetricTypes = 'cpu' | 'memory' | 'network' | 'disk' | 'log' | 'kpi'; +export type KubernetesContainerMetrics = 'cpu' | 'memory'; +export type DockerContainerMetrics = 'cpu' | 'memory' | 'network' | 'disk'; +export type ContainerMetricTypes = KubernetesContainerMetrics | DockerContainerMetrics; + +export interface MetricsChartsFields { + assetId: string; + dateRange: TimeRange; + dataView?: DataView; + overview?: boolean; + onShowAll?: (metric: string) => void; +} diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/components/kpis/container_kpi_charts.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/components/kpis/container_kpi_charts.tsx new file mode 100644 index 0000000000000..8e4a67526f72c --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/components/kpis/container_kpi_charts.tsx @@ -0,0 +1,136 @@ +/* + * 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 { EuiFlexItem, useEuiTheme } from '@elastic/eui'; +import type { DataView } from '@kbn/data-views-plugin/public'; +import type { Filter, Query, TimeRange } from '@kbn/es-query'; +import { Kpi } from './kpi'; +import { + useK8sContainerKpiCharts, + useDockerContainerKpiCharts, +} from '../../hooks/use_container_metrics_charts'; +import { useIntegrationCheck } from '../../hooks/use_integration_check'; +import { INTEGRATIONS } from '../../constants'; + +export interface ContainerKpiChartsProps { + dataView?: DataView; + dateRange: TimeRange; + query?: Query; + filters?: Filter[]; + searchSessionId?: string; + options?: { + getSubtitle?: (formulaValue: string) => string; + }; + loading?: boolean; +} + +export const ContainerKpiCharts = ({ + dateRange, + dataView, + filters, + options, + query, + searchSessionId, + loading = false, +}: ContainerKpiChartsProps) => { + const isK8Container = useIntegrationCheck({ dependsOn: INTEGRATIONS.kubernetesContainer }); + + return isK8Container ? ( + + ) : ( + + ); +}; + +const DockerKpiCharts = ({ + dateRange, + dataView, + filters, + options, + query, + searchSessionId, + loading = false, +}: ContainerKpiChartsProps) => { + const { euiTheme } = useEuiTheme(); + const charts = useDockerContainerKpiCharts({ + dataViewId: dataView?.id, + options: { + getSubtitle: options?.getSubtitle, + seriesColor: euiTheme.colors.lightestShade, + }, + }); + + return ( + <> + {charts.map((chartProps, index) => ( + + + + ))} + + ); +}; + +const KubernetesKpiCharts = ({ + dateRange, + dataView, + filters, + options, + query, + searchSessionId, + loading = false, +}: ContainerKpiChartsProps) => { + const { euiTheme } = useEuiTheme(); + const charts = useK8sContainerKpiCharts({ + dataViewId: dataView?.id, + options: { + getSubtitle: options?.getSubtitle, + seriesColor: euiTheme.colors.lightestShade, + }, + }); + + return ( + <> + {charts.map((chartProps, index) => ( + + + + ))} + + ); +}; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/components/kpis/host_kpi_charts.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/components/kpis/host_kpi_charts.tsx index e73f5a6cd0656..fa11d67df90e9 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/components/kpis/host_kpi_charts.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/components/kpis/host_kpi_charts.tsx @@ -10,7 +10,7 @@ import { EuiFlexItem, useEuiTheme } from '@elastic/eui'; import type { DataView } from '@kbn/data-views-plugin/public'; import type { Filter, Query, TimeRange } from '@kbn/es-query'; import { Kpi } from './kpi'; -import { useHostKpiCharts } from '../../hooks/use_metrics_charts'; +import { useHostKpiCharts } from '../../hooks/use_host_metrics_charts'; export interface HostKpiChartsProps { dataView?: DataView; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/constants.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/constants.ts index 4c66628324c50..81a82ecb30875 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/constants.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/constants.ts @@ -15,5 +15,7 @@ export const APM_HOST_FILTER_FIELD = 'host.hostname'; export const ASSET_DETAILS_URL_STATE_KEY = 'assetDetails'; export const INTEGRATIONS = { - [INTEGRATION_NAME.kubernetes]: 'kubernetes.node', + [INTEGRATION_NAME.kubernetesNode]: 'kubernetes.node', + [INTEGRATION_NAME.kubernetesContainer]: 'kubernetes.container', + [INTEGRATION_NAME.docker]: 'docker', }; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_container_metrics_charts.test.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_container_metrics_charts.test.ts new file mode 100644 index 0000000000000..f35c7ca63b552 --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_container_metrics_charts.test.ts @@ -0,0 +1,114 @@ +/* + * 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 { ContainerMetricTypes } from '../charts/types'; +import { + useK8sContainerPageViewMetricsCharts, + useDockerContainerPageViewMetricsCharts, + useDockerContainerKpiCharts, + useK8sContainerKpiCharts, +} from './use_container_metrics_charts'; + +const metricsDataViewId = 'metricsDataViewId'; +const getContainerChartsExpectedOrder = (metric: ContainerMetricTypes): string[] => { + switch (metric) { + case 'cpu': + return ['cpuUsage']; + case 'memory': + return ['memoryUsage']; + default: + return []; + } +}; + +const getK8sContainerChartsExpectedOrder = (metric: ContainerMetricTypes): string[] => { + switch (metric) { + case 'cpu': + return ['k8sCpuUsage']; + case 'memory': + return ['k8sMemoryUsage']; + default: + return []; + } +}; + +describe('useDockerContainerCharts', () => { + describe.each<[ContainerMetricTypes]>([['cpu'], ['memory']])('%s', (item) => { + test.each<[ContainerMetricTypes]>([[item]])( + 'should return an array of charts with correct order for metric "%s"', + async (metric) => { + const expectedOrder = getContainerChartsExpectedOrder(metric); + + const { result, waitForNextUpdate } = renderHook(() => + useDockerContainerPageViewMetricsCharts({ metricsDataViewId, metric }) + ); + await waitForNextUpdate(); + + const { charts } = result.current; + + expect(charts).toHaveLength(expectedOrder.length); + + charts.forEach((chart, index) => { + expect(chart).toHaveProperty('id', expectedOrder[index]); + }); + } + ); + }); +}); + +describe('useDockerKPIMetricsCharts', () => { + it('should return an array of charts with correct order', async () => { + const expectedOrder = ['cpuUsage', 'memoryUsage']; + const { result, waitForNextUpdate } = renderHook(() => + useDockerContainerKpiCharts({ dataViewId: metricsDataViewId }) + ); + await waitForNextUpdate(); + expect(result.current).toHaveLength(expectedOrder.length); + result.current.forEach((chart, index) => { + expect(chart).toHaveProperty('id', expectedOrder[index]); + }); + }); +}); + +describe('useK8sContainerCharts', () => { + describe.each<[ContainerMetricTypes]>([['cpu'], ['memory']])('%s', (item) => { + test.each<[ContainerMetricTypes]>([[item]])( + 'should return an array of charts with correct order for metric "%s"', + async (metric) => { + const expectedOrder = getK8sContainerChartsExpectedOrder(metric); + + const { result, waitForNextUpdate } = renderHook(() => + useK8sContainerPageViewMetricsCharts({ metricsDataViewId, metric }) + ); + await waitForNextUpdate(); + + const { charts } = result.current; + + expect(charts).toHaveLength(expectedOrder.length); + + charts.forEach((chart, index) => { + expect(chart).toHaveProperty('id', expectedOrder[index]); + }); + } + ); + }); +}); + +describe('useK8sContainerKPIMetricsCharts', () => { + it('should return an array of charts with correct order', async () => { + const expectedOrder = ['k8sCpuUsage', 'k8sMemoryUsage']; + const { result, waitForNextUpdate } = renderHook(() => + useK8sContainerKpiCharts({ dataViewId: metricsDataViewId }) + ); + await waitForNextUpdate(); + expect(result.current).toHaveLength(expectedOrder.length); + result.current.forEach((chart, index) => { + expect(chart).toHaveProperty('id', expectedOrder[index]); + }); + }); +}); diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_container_metrics_charts.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_container_metrics_charts.ts new file mode 100644 index 0000000000000..08710378643d5 --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_container_metrics_charts.ts @@ -0,0 +1,163 @@ +/* + * 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 { findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; +import useAsync from 'react-use/lib/useAsync'; +import { ContainerMetricTypes } from '../charts/types'; + +const getSubtitleFromFormula = (value: string) => + value.startsWith('max') + ? i18n.translate('xpack.infra.containerViewPage.kpi.subtitle.max', { defaultMessage: 'Max' }) + : i18n.translate('xpack.infra.assetDetails.kpi.subtitle.average', { + defaultMessage: 'Average', + }); + +export const useDockerContainerPageViewMetricsCharts = ({ + metric, + metricsDataViewId, +}: { + metric: ContainerMetricTypes; + metricsDataViewId?: string; +}) => { + const { value: charts = [], error } = useAsync(async () => { + const containerCharts = await getDockerContainerCharts(metric); + + return containerCharts.map((chart) => { + return { + ...chart, + ...(metricsDataViewId && { + dataset: { + index: metricsDataViewId, + }, + }), + }; + }); + }, [metricsDataViewId]); + + return { charts, error }; +}; + +const getDockerContainerCharts = async (metric: ContainerMetricTypes) => { + const model = findInventoryModel('container'); + const { cpu, memory } = await model.metrics.getCharts(); + + switch (metric) { + case 'cpu': + return [cpu.xy.dockerContainerCpuUsage]; + case 'memory': + return [memory.xy.dockerContainerMemoryUsage]; + default: + return []; + } +}; + +export const useK8sContainerPageViewMetricsCharts = ({ + metric, + metricsDataViewId, +}: { + metric: ContainerMetricTypes; + metricsDataViewId?: string; +}) => { + const { value: charts = [], error } = useAsync(async () => { + const containerK8sCharts = await getK8sContainerCharts(metric); + + return containerK8sCharts.map((chart) => { + return { + ...chart, + ...(metricsDataViewId && { + dataset: { + index: metricsDataViewId, + }, + }), + }; + }); + }, [metricsDataViewId]); + + return { charts, error }; +}; + +const getK8sContainerCharts = async (metric: ContainerMetricTypes) => { + const model = findInventoryModel('container'); + const { cpu, memory } = await model.metrics.getCharts(); + + switch (metric) { + case 'cpu': + return [cpu.xy.k8sContainerCpuUsage]; + case 'memory': + return [memory.xy.k8sContainerMemoryUsage]; + default: + return []; + } +}; + +export const useDockerContainerKpiCharts = ({ + dataViewId, + options, +}: { + dataViewId?: string; + options?: { seriesColor: string; getSubtitle?: (formulaValue: string) => string }; +}) => { + const { value: charts = [] } = useAsync(async () => { + const model = findInventoryModel('container'); + const { cpu, memory } = await model.metrics.getCharts(); + + return [cpu.metric.dockerContainerCpuUsage, memory.metric.dockerContainerMemoryUsage].map( + (chart) => ({ + ...chart, + seriesColor: options?.seriesColor, + decimals: 1, + subtitle: getSubtitle(options, chart), + ...(dataViewId && { + dataset: { + index: dataViewId, + }, + }), + }) + ); + }, [dataViewId, options?.seriesColor, options?.getSubtitle]); + + return charts; +}; + +export const useK8sContainerKpiCharts = ({ + dataViewId, + options, +}: { + dataViewId?: string; + options?: { seriesColor: string; getSubtitle?: (formulaValue: string) => string }; +}) => { + const { value: charts = [] } = useAsync(async () => { + const model = findInventoryModel('container'); + const { cpu, memory } = await model.metrics.getCharts(); + + return [cpu.metric.k8sContainerCpuUsage, memory.metric.k8sContainerMemoryUsage].map( + (chart) => ({ + ...chart, + seriesColor: options?.seriesColor, + decimals: 1, + subtitle: getSubtitle(options, chart), + ...(dataViewId && { + dataset: { + index: dataViewId, + }, + }), + }) + ); + }, [dataViewId, options?.seriesColor, options?.getSubtitle]); + + return charts; +}; + +function getSubtitle( + options: { getSubtitle?: ((formulaValue: string) => string) | undefined } | undefined, + chart: { value: string } +) { + return options?.getSubtitle + ? options?.getSubtitle(chart.value) + : getSubtitleFromFormula(chart.value); +} diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_metrics_charts.test.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_host_metrics_charts.test.ts similarity index 97% rename from x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_metrics_charts.test.ts rename to x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_host_metrics_charts.test.ts index 1e0573e187074..c4e3815f5e0f8 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_metrics_charts.test.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_host_metrics_charts.test.ts @@ -6,12 +6,8 @@ */ import { renderHook } from '@testing-library/react-hooks'; -import { - useHostKpiCharts, - useHostCharts, - useKubernetesCharts, - type HostMetricTypes, -} from './use_metrics_charts'; +import { HostMetricTypes } from '../charts/types'; +import { useHostKpiCharts, useHostCharts, useKubernetesCharts } from './use_host_metrics_charts'; const dataViewId = 'metricsDataViewId'; const getHostChartsExpectedOrder = (metric: HostMetricTypes, overview: boolean): string[] => { diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_metrics_charts.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_host_metrics_charts.ts similarity index 91% rename from x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_metrics_charts.ts rename to x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_host_metrics_charts.ts index 5450e86029670..6d5381caf6187 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_metrics_charts.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/hooks/use_host_metrics_charts.ts @@ -8,8 +8,8 @@ import { i18n } from '@kbn/i18n'; import { findInventoryModel } from '@kbn/metrics-data-access-plugin/common'; import useAsync from 'react-use/lib/useAsync'; +import { HostMetricTypes } from '../charts/types'; -export type HostMetricTypes = 'cpu' | 'memory' | 'network' | 'disk' | 'log' | 'kpi'; interface UseChartsOptions { overview?: boolean; } @@ -101,9 +101,7 @@ export const useHostKpiCharts = ({ ...chart, seriesColor: options?.seriesColor, decimals: 1, - subtitle: options?.getSubtitle - ? options?.getSubtitle(chart.value) - : getSubtitleFromFormula(chart.value), + subtitle: getSubtitle(options, chart), ...(dataViewId && { dataset: { index: dataViewId, @@ -151,3 +149,12 @@ const getHostsCharts = async ({ return []; } }; + +function getSubtitle( + options: { getSubtitle?: ((formulaValue: string) => string) | undefined } | undefined, + chart: { value: string } +) { + return options?.getSubtitle + ? options?.getSubtitle(chart.value) + : getSubtitleFromFormula(chart.value); +} diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metrics/host_metrics.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metrics/host_metrics.tsx index 3246d452399cb..9d08a628aec5f 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metrics/host_metrics.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/metrics/host_metrics.tsx @@ -6,13 +6,13 @@ */ import React, { useRef } from 'react'; -import { HostMetricTypes } from '../../hooks/use_metrics_charts'; import { useDatePickerContext } from '../../hooks/use_date_picker'; import { useAssetDetailsRenderPropsContext } from '../../hooks/use_asset_details_render_props'; import { useDataViewsContext } from '../../hooks/use_data_views'; import { useIntersectingState } from '../../hooks/use_intersecting_state'; import { MetricsTemplate } from './metrics_template'; -import { HostCharts, KubernetesCharts } from '../../charts'; +import { HostCharts, KubernetesNodeCharts } from '../../charts'; +import { HostMetricTypes } from '../../charts/types'; const METRIC_TYPES: Array> = [ 'cpu', @@ -41,7 +41,7 @@ export const HostMetrics = () => { metric={metric} /> ))} - { +export const KPIGrid = ({ assetId, assetType, dataView, dateRange }: Props) => { const { searchSessionId } = useLoadingStateContext(); const filters = useMemo(() => { return [ - buildCombinedHostsFilter({ - field: findInventoryFields('host').id, + buildCombinedAssetFilter({ + field: findInventoryFields(assetType).id, values: [assetId], dataView, }), ]; - }, [dataView, assetId]); + }, [dataView, assetId, assetType]); return ( - + {assetType === 'host' ? ( + + ) : ( + + )} ); }; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/metrics/container_metrics.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/metrics/container_metrics.tsx new file mode 100644 index 0000000000000..f14619005eadb --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/metrics/container_metrics.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 { EuiFlexGroup, EuiFlexGrid } from '@elastic/eui'; +import type { TimeRange } from '@kbn/es-query'; +import type { DataView } from '@kbn/data-views-plugin/public'; +import { DockerCharts } from '../../../charts/docker_charts'; +import { INTEGRATIONS } from '../../../constants'; +import { useIntegrationCheck } from '../../../hooks/use_integration_check'; +import { KubernetesContainerCharts } from '../../../charts/kubernetes_charts'; + +interface Props { + assetId: string; + dateRange: TimeRange; + dataView?: DataView; +} + +export const ContainerMetrics = (props: Props) => { + const isK8sContainer = useIntegrationCheck({ dependsOn: INTEGRATIONS.kubernetesContainer }); + + return ( + + + {isK8sContainer ? ( + <> + + + + ) : ( + <> + + + + )} + + + ); +}; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/metrics/host_metrics.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/metrics/host_metrics.tsx index e7fe8bf795b47..6ac962570ebc6 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/metrics/host_metrics.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/metrics/host_metrics.tsx @@ -9,7 +9,7 @@ import { EuiFlexGroup, EuiFlexGrid } from '@elastic/eui'; import type { TimeRange } from '@kbn/es-query'; import type { DataView } from '@kbn/data-views-plugin/public'; import { useTabSwitcherContext } from '../../../hooks/use_tab_switcher'; -import { HostCharts, KubernetesCharts } from '../../../charts'; +import { HostCharts, KubernetesNodeCharts } from '../../../charts'; import { ContentTabIds } from '../../../types'; interface Props { @@ -33,7 +33,7 @@ export const HostMetrics = (props: Props) => { - + ); }; diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/metrics/metrics.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/metrics/metrics.tsx index b5cdac6bd4a74..f3ad7da1b99f5 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/metrics/metrics.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/metrics/metrics.tsx @@ -9,6 +9,7 @@ import type { TimeRange } from '@kbn/es-query'; import type { DataView } from '@kbn/data-views-plugin/public'; import { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; import { HostMetrics } from './host_metrics'; +import { ContainerMetrics } from './container_metrics'; import { Section } from '../../../components/section'; import { MetricsSectionTitle } from '../section_titles'; @@ -24,6 +25,8 @@ export const MetricsContent = ({ assetType, ...props }: Props) => { switch (assetType) { case 'host': return ; + case 'container': + return ; default: return null; } @@ -31,7 +34,7 @@ export const MetricsContent = ({ assetType, ...props }: Props) => { return (
} + title={} data-test-subj="infraAssetDetailsMetricsCollapsible" id="metrics" collapsible diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/overview.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/overview.tsx index c67347a765d69..99723fce587ba 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/overview.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/overview.tsx @@ -48,21 +48,29 @@ export const Overview = () => { return ( - - - - - {fetchMetadataError && !metadataLoading ? : metadataSummarySection} - - - - + {asset.type === 'host' ? : null} + + + + {fetchMetadataError && !metadataLoading ? : metadataSummarySection} + {asset.type === 'host' ? ( + + + + + ) : null} {asset.type === 'host' ? ( diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/section_titles.tsx b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/section_titles.tsx index c330944ffbcdc..d7a718939056a 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/section_titles.tsx +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/tabs/overview/section_titles.tsx @@ -6,12 +6,14 @@ */ import React from 'react'; import { i18n } from '@kbn/i18n'; +import type { InventoryItemType } from '@kbn/metrics-data-access-plugin/common'; import { HostMetricsExplanationContent } from '../../../lens'; import { TitleWithTooltip } from '../../components/section_title'; import { AlertsTooltipContent } from '../../components/alerts_tooltip_content'; import { ServicesTooltipContent } from '../../components/services_tooltip_content'; +import { ContainerMetricsExplanationContent } from '../../../lens/metric_explanation/container_metrics_explanation_content'; -export const MetricsSectionTitle = () => { +export const MetricsSectionTitle = ({ assetType }: { assetType: InventoryItemType }) => { return ( { })} data-test-subj="infraAssetDetailsMetricsTitle" tooltipTestSubj="infraAssetDetailsMetricsPopoverButton" - tooltipContent={} + tooltipContent={getTooltipContent(assetType)} /> ); }; @@ -47,3 +49,12 @@ export const ServicesSectionTitle = () => ( tooltipContent={} /> ); + +function getTooltipContent(assetType: InventoryItemType) { + switch (assetType) { + case 'host': + return ; + default: + return ; + } +} diff --git a/x-pack/plugins/observability_solution/infra/public/components/asset_details/translations.ts b/x-pack/plugins/observability_solution/infra/public/components/asset_details/translations.ts index 1313e655f6b6f..0f313dc445d69 100644 --- a/x-pack/plugins/observability_solution/infra/public/components/asset_details/translations.ts +++ b/x-pack/plugins/observability_solution/infra/public/components/asset_details/translations.ts @@ -31,3 +31,18 @@ export const HOST_METRIC_GROUP_TITLES = { defaultMessage: 'Kubernetes', }), }; + +export const CONTAINER_METRIC_GROUP_TITLES = { + cpu: i18n.translate('xpack.infra.metricsGroup.containerCpu', { + defaultMessage: 'CPU', + }), + memory: i18n.translate('xpack.infra.metricsGroup.containerMemory', { + defaultMessage: 'Memory', + }), + network: i18n.translate('xpack.infra.metricsGroup.containerNetwork', { + defaultMessage: 'Network', + }), + disk: i18n.translate('xpack.infra.metricsGroup.containerDisk', { + defaultMessage: 'Disk', + }), +}; 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 0299bd3582c8b..e51a7b53bda7d 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 @@ -98,5 +98,7 @@ export interface RouteState { export type DataViewOrigin = 'logs' | 'metrics'; export enum INTEGRATION_NAME { - kubernetes = 'kubernetes', + kubernetesNode = 'kubernetesNode', + kubernetesContainer = 'kubernetesContainer', + docker = 'docker', } diff --git a/x-pack/plugins/observability_solution/infra/public/components/lens/metric_explanation/container_metrics_explanation_content.tsx b/x-pack/plugins/observability_solution/infra/public/components/lens/metric_explanation/container_metrics_explanation_content.tsx new file mode 100644 index 0000000000000..637db2e6388ef --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/public/components/lens/metric_explanation/container_metrics_explanation_content.tsx @@ -0,0 +1,54 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { EuiText, EuiLink } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { + CONTAINER_METRICS_DOC_HREF, + HOST_METRICS_DOTTED_LINES_DOC_HREF, +} from '../../../common/visualizations/constants'; + +export const ContainerMetricsExplanationContent = () => { + return ( + +

+ +

+

+ + + {i18n.translate('xpack.infra.containerViewPage.tooltip.whatAreTheseMetricsLink', { + defaultMessage: 'What are these metrics?', + })} + + +

+

+ + + {i18n.translate('xpack.infra.hostsViewPage.tooltip.whyAmISeeingDottedLines', { + defaultMessage: 'Why am I seeing dotted lines?', + })} + + +

+
+ ); +}; 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 6177518b3a8fe..d7e36d950d4ca 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 @@ -10,7 +10,7 @@ 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'; -import { commonFlyoutTabs } from '../../../../../common/asset_details_config/asset_details_tabs'; +import { hostDetailsTabs } from '../../../../../common/asset_details_config/asset_details_tabs'; export interface Props { node: HostNodeRow; @@ -32,7 +32,7 @@ export const FlyoutWrapper = ({ node: { name }, closeFlyout }: Props) => { showActionsColumn: true, }, }} - tabs={commonFlyoutTabs} + tabs={hostDetailsTabs} links={['nodeDetails']} renderMode={{ mode: 'flyout', 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 9c43581df8a9d..9fd8f40fa08c7 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 @@ -7,7 +7,7 @@ import React from 'react'; import { i18n } from '@kbn/i18n'; import { HostKpiCharts } from '../../../../../components/asset_details'; -import { buildCombinedHostsFilter } from '../../../../../utils/filters/build'; +import { buildCombinedAssetFilter } from '../../../../../utils/filters/build'; import { useUnifiedSearchContext } from '../../hooks/use_unified_search'; import { useHostsViewContext } from '../../hooks/use_hosts_view'; import { useHostCountContext } from '../../hooks/use_host_count'; @@ -26,7 +26,7 @@ export const KpiCharts = () => { const filters = shouldUseSearchCriteria ? [...searchCriteria.filters, ...(searchCriteria.panelFilters ?? [])] : [ - buildCombinedHostsFilter({ + buildCombinedAssetFilter({ field: 'host.name', values: hostNodes.map((p) => p.name), dataView, diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/tabs/logs/logs_tab_content.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/tabs/logs/logs_tab_content.tsx index c977c1fde37a9..27344ccd1f108 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/tabs/logs/logs_tab_content.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/tabs/logs/logs_tab_content.tsx @@ -16,7 +16,7 @@ import { useUnifiedSearchContext } from '../../../hooks/use_unified_search'; import { useLogsSearchUrlState } from '../../../hooks/use_logs_search_url_state'; import { LogsLinkToStream } from './logs_link_to_stream'; import { LogsSearchBar } from './logs_search_bar'; -import { buildCombinedHostsFilter } from '../../../../../../utils/filters/build'; +import { buildCombinedAssetFilter } from '../../../../../../utils/filters/build'; import { useLogViewReference } from '../../../../../../hooks/use_log_view_reference'; export const LogsTabContent = () => { @@ -27,7 +27,7 @@ export const LogsTabContent = () => { const hostsFilterQuery = useMemo( () => - buildCombinedHostsFilter({ + buildCombinedAssetFilter({ field: 'host.name', values: hostNodes.map((p) => p.name), }), diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/tabs/metrics/chart.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/tabs/metrics/chart.tsx index 88846924c15e2..79a4b610dd7a0 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/tabs/metrics/chart.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/hosts/components/tabs/metrics/chart.tsx @@ -11,7 +11,7 @@ import { METRIC_CHART_HEIGHT } from '../../../../../../common/visualizations/con import { LensChart } from '../../../../../../components/lens'; import { useUnifiedSearchContext } from '../../../hooks/use_unified_search'; import { useHostsViewContext } from '../../../hooks/use_hosts_view'; -import { buildCombinedHostsFilter } from '../../../../../../utils/filters/build'; +import { buildCombinedAssetFilter } from '../../../../../../utils/filters/build'; import { useHostsTableContext } from '../../../hooks/use_hosts_table'; import { useAfterLoadedState } from '../../../hooks/use_after_loaded_state'; @@ -40,7 +40,7 @@ export const Chart = ({ id, ...chartProps }: ChartProps) => { return shouldUseSearchCriteria ? [...searchCriteria.filters, ...(searchCriteria.panelFilters ?? [])] : [ - buildCombinedHostsFilter({ + buildCombinedAssetFilter({ field: 'host.name', values: currentPage.map((p) => p.name), dataView, 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 e5bd61b9b1e19..0cf70b4b4182b 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 @@ -29,7 +29,7 @@ import { useMetricsDataViewContext } from './use_metrics_data_view'; import { ColumnHeader } from '../components/table/column_header'; import { TABLE_COLUMN_LABEL, TABLE_CONTENT_LABEL } from '../translations'; import { METRICS_TOOLTIP } from '../../../../common/visualizations'; -import { buildCombinedHostsFilter } from '../../../../utils/filters/build'; +import { buildCombinedAssetFilter } from '../../../../utils/filters/build'; /** * Columns and items types @@ -151,7 +151,7 @@ export const useHostsTable = () => { return []; } const selectedHostNames = selectedItems.map(({ name }) => name); - const newFilter = buildCombinedHostsFilter({ + const newFilter = buildCombinedAssetFilter({ field: 'host.name', values: selectedHostNames, dataView, 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 31b16ca70f26d..af50a277b593b 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 @@ -12,7 +12,7 @@ import type { InfraWaffleMapOptions } from '../../../../../lib/lib'; import { ContentTabIds } from '../../../../../components/asset_details/types'; import { AssetDetails } from '../../../../../components/asset_details'; import { useSourceContext } from '../../../../../containers/metrics_source'; -import { commonFlyoutTabs } from '../../../../../common/asset_details_config/asset_details_tabs'; +import { hostDetailsTabs } from '../../../../../common/asset_details_config/asset_details_tabs'; interface Props { assetName: string; @@ -25,7 +25,7 @@ interface Props { } const flyoutTabs = [ - ...commonFlyoutTabs, + ...hostDetailsTabs, { id: ContentTabIds.LINK_TO_APM, name: i18n.translate('xpack.infra.assetDetails.tabs.linkToApm', { diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/waffle_inventory_switcher.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/waffle_inventory_switcher.tsx index 29b3978573377..d7b88870b6450 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/waffle_inventory_switcher.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/inventory_view/components/waffle/waffle_inventory_switcher.tsx @@ -57,7 +57,7 @@ export const WaffleInventorySwitcher: React.FC = () => { ); const goToHost = useCallback(() => goToNodeType('host'), [goToNodeType]); const goToK8 = useCallback(() => goToNodeType('pod'), [goToNodeType]); - const goToDocker = useCallback(() => goToNodeType('container'), [goToNodeType]); + const goToContainer = useCallback(() => goToNodeType('container'), [goToNodeType]); const goToAwsEC2 = useCallback(() => goToNodeType('awsEC2'), [goToNodeType]); const goToAwsS3 = useCallback(() => goToNodeType('awsS3'), [goToNodeType]); const goToAwsRDS = useCallback(() => goToNodeType('awsRDS'), [goToNodeType]); @@ -79,9 +79,9 @@ export const WaffleInventorySwitcher: React.FC = () => { onClick: goToK8, }, { - 'data-test-subj': 'goToDocker', + 'data-test-subj': 'goToContainer', name: getDisplayNameForType('container'), - onClick: goToDocker, + onClick: goToContainer, }, { name: 'AWS', @@ -117,7 +117,7 @@ export const WaffleInventorySwitcher: React.FC = () => { ], }, ] as EuiContextMenuPanelDescriptor[], - [goToAwsEC2, goToAwsRDS, goToAwsS3, goToAwsSQS, goToDocker, goToHost, goToK8] + [goToAwsEC2, goToAwsRDS, goToAwsS3, goToAwsSQS, goToContainer, goToHost, goToK8] ); const selectedText = useMemo(() => { 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 f0733ca291b37..31cbe1baae31b 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 @@ -14,7 +14,7 @@ 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 { commonFlyoutTabs } from '../../../common/asset_details_config/asset_details_tabs'; +import { getAssetDetailsTabs } from '../../../common/asset_details_config/asset_details_tabs'; export const AssetDetailPage = () => { const { isLoading, loadSourceFailureMessage, loadSource, source } = useSourceContext(); @@ -43,7 +43,7 @@ export const AssetDetailPage = () => { { params: { type: nodeType }, } = useRouteMatch<{ type: InventoryItemType; node: string }>(); + const isContainerAssetViewEnabled = useUiSetting(enableInfrastructureContainerAssetView); + + const showContainerAssetDetailPage = nodeType === 'container' && isContainerAssetViewEnabled; return ( - {nodeType === 'host' ? ( + {nodeType === 'host' || showContainerAssetDetailPage ? ( ) : ( 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 2db5427331286..28377c23da936 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 @@ -51,6 +51,7 @@ export function useMetricsExplorerData( dropLastBucket: options.dropLastBucket != null ? options.dropLastBucket : true, metrics: options.aggregation === 'count' ? [{ aggregation: 'count' }] : options.metrics, groupBy: options.groupBy, + groupInstance: options.groupInstance, afterKey, limit: options.limit, indexPattern: source.metricAlias, diff --git a/x-pack/plugins/observability_solution/infra/public/pages/metrics/settings/features_configuration_panel.tsx b/x-pack/plugins/observability_solution/infra/public/pages/metrics/settings/features_configuration_panel.tsx index a8f8569014c7d..f0d7e9d487277 100644 --- a/x-pack/plugins/observability_solution/infra/public/pages/metrics/settings/features_configuration_panel.tsx +++ b/x-pack/plugins/observability_solution/infra/public/pages/metrics/settings/features_configuration_panel.tsx @@ -13,6 +13,7 @@ import React from 'react'; import { enableInfrastructureHostsView, enableInfrastructureProfilingIntegration, + enableInfrastructureContainerAssetView, } from '@kbn/observability-plugin/common'; import { useEditableSettings } from '@kbn/observability-shared-plugin/public'; import { withSuspense } from '@kbn/shared-ux-utility'; @@ -83,6 +84,12 @@ export function FeaturesConfigurationPanel({ unsavedChange={unsavedChanges[enableInfrastructureProfilingIntegration]} /> )} + ); 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 cbfe09df53b2d..004a0b9e9bb55 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 @@ -14,6 +14,7 @@ import { useEditableSettings, } from '@kbn/observability-shared-plugin/public'; import { + enableInfrastructureContainerAssetView, enableInfrastructureHostsView, enableInfrastructureProfilingIntegration, } from '@kbn/observability-plugin/common'; @@ -90,6 +91,7 @@ export const SourceConfigurationSettings = ({ const infraUiSettings = useEditableSettings([ enableInfrastructureHostsView, enableInfrastructureProfilingIntegration, + enableInfrastructureContainerAssetView, ]); const resetAllUnsavedChanges = useCallback(() => { 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 b52804390bc98..0aee9c00814c6 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 @@ -16,7 +16,7 @@ import type { DataView } from '@kbn/data-views-plugin/common'; import { findInventoryFields } from '@kbn/metrics-data-access-plugin/common'; import type { InfraCustomDashboardAssetType } from '../../../common/custom_dashboards'; -export const buildCombinedHostsFilter = ({ +export const buildCombinedAssetFilter = ({ field, values, dataView, diff --git a/x-pack/plugins/observability_solution/infra/public/utils/filters/create_alerts_es_query.ts b/x-pack/plugins/observability_solution/infra/public/utils/filters/create_alerts_es_query.ts index a0922e794df71..e80ac2cdf9ac0 100644 --- a/x-pack/plugins/observability_solution/infra/public/utils/filters/create_alerts_es_query.ts +++ b/x-pack/plugins/observability_solution/infra/public/utils/filters/create_alerts_es_query.ts @@ -9,7 +9,7 @@ import { ALERT_TIME_RANGE } from '@kbn/rule-data-utils'; import { BoolQuery, buildEsQuery, Filter, type TimeRange } from '@kbn/es-query'; import type { AlertStatus } from '@kbn/observability-plugin/common/typings'; import { findInventoryFields } from '@kbn/metrics-data-access-plugin/common'; -import { buildCombinedHostsFilter } from './build'; +import { buildCombinedAssetFilter } from './build'; import { ALERT_STATUS_QUERY } from '../../components/shared/alerts/constants'; export interface AlertsEsQuery { @@ -28,7 +28,7 @@ export const createAlertsEsQuery = ({ const alertStatusFilter = createAlertStatusFilter(status); const dateFilter = createDateFilter(dateRange); - const hostsFilter = buildCombinedHostsFilter({ + const hostsFilter = buildCombinedAssetFilter({ field: findInventoryFields('host').id, values: assetIds, }); diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/common/types.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/common/types.ts new file mode 100644 index 0000000000000..97ccd8a339854 --- /dev/null +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/common/types.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export interface Group { + field: string; + value: string; +} diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/common/utils.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/common/utils.ts index be54f570cd8bf..e91f80dccbac9 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/alerting/common/utils.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/common/utils.ts @@ -28,6 +28,7 @@ import { AlertExecutionDetails, InventoryMetricConditions, } from '../../../../common/alerting/metrics/types'; +import { Group } from './types'; const ALERT_CONTEXT_CONTAINER = 'container'; const ALERT_CONTEXT_ORCHESTRATOR = 'orchestrator'; @@ -313,3 +314,22 @@ export const getGroupByObject = ( } return groupByKeysObjectMapping; }; + +export const getFormattedGroupBy = ( + groupBy: string | string[] | undefined, + groupSet: Set +): Record => { + const groupByKeysObjectMapping: Record = {}; + if (groupBy) { + groupSet.forEach((group) => { + const groupSetKeys = group.split(','); + groupByKeysObjectMapping[group] = Array.isArray(groupBy) + ? groupBy.reduce((result: Group[], groupByItem, index) => { + result.push({ field: groupByItem, value: groupSetKeys[index]?.trim() }); + return result; + }, []) + : [{ field: groupBy, value: group }]; + }); + } + return groupByKeysObjectMapping; +}; diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts index 2a7d8279e2fa1..eeb7f61b99ddf 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.test.ts @@ -28,7 +28,9 @@ import { ALERT_EVALUATION_THRESHOLD, ALERT_EVALUATION_VALUES, ALERT_REASON, + ALERT_GROUP, } from '@kbn/rule-data-utils'; +import { Group } from '../common/types'; jest.mock('./lib/evaluate_rule', () => ({ evaluateRule: jest.fn() })); @@ -956,6 +958,7 @@ describe('The metric threshold rule type', () => { reason: 'test.metric.1 is 1 in the last 1 min for host-01. Alert when > 0.75.', tags: ['host-01_tag1', 'host-01_tag2', 'ruleTag1', 'ruleTag2'], groupByKeys: { host: { name: alertIdA } }, + group: [{ field: 'host.name', value: alertIdA }], }); testAlertReported(2, { id: alertIdB, @@ -967,6 +970,7 @@ describe('The metric threshold rule type', () => { reason: 'test.metric.1 is 3 in the last 1 min for host-02. Alert when > 0.75.', tags: ['host-02_tag1', 'host-02_tag2', 'ruleTag1', 'ruleTag2'], groupByKeys: { host: { name: alertIdB } }, + group: [{ field: 'host.name', value: alertIdB }], }); }); }); @@ -2325,6 +2329,7 @@ describe('The metric threshold rule type', () => { actionGroup, alertState, groupByKeys, + group, conditions, reason, tags, @@ -2342,6 +2347,7 @@ describe('The metric threshold rule type', () => { }>; reason: string; tags?: string[]; + group?: Group[]; } ) { expect(services.alertsClient.report).toHaveBeenNthCalledWith(index, { @@ -2394,6 +2400,18 @@ describe('The metric threshold rule type', () => { ? { [ALERT_EVALUATION_VALUES]: conditions.map((c) => c.evaluation_value), [ALERT_EVALUATION_THRESHOLD]: getThresholds(conditions), + ...(groupByKeys + ? group + ? { + [ALERT_GROUP]: group, + } + : { + [ALERT_GROUP]: Object.keys(groupByKeys).map((key) => ({ + field: key, + value: groupByKeys[key], + })), + } + : {}), } : {}), [ALERT_REASON]: reason, diff --git a/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts b/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts index 090def7788313..4ccd94f8560d2 100644 --- a/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts +++ b/x-pack/plugins/observability_solution/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts @@ -9,6 +9,7 @@ import { i18n } from '@kbn/i18n'; import { ALERT_EVALUATION_THRESHOLD, ALERT_EVALUATION_VALUES, + ALERT_GROUP, ALERT_REASON, } from '@kbn/rule-data-utils'; import { isEqual } from 'lodash'; @@ -43,8 +44,10 @@ import { validGroupByForContext, flattenAdditionalContext, getGroupByObject, + getFormattedGroupBy, } from '../common/utils'; import { getEvaluationValues, getThresholds } from '../common/get_values'; +import { Group } from '../common/types'; import { EvaluatedRuleParams, evaluateRule, Evaluation } from './lib/evaluate_rule'; import { MissingGroupsRecord } from './lib/check_missing_group'; @@ -83,15 +86,16 @@ type MetricThresholdAllowedActionGroups = ActionGroupIdsOf< typeof FIRED_ACTIONS | typeof WARNING_ACTIONS | typeof NO_DATA_ACTIONS >; -type MetricThresholdAlertReporter = ( - id: string, - reason: string, - actionGroup: MetricThresholdActionGroup, - context: MetricThresholdAlertContext, - additionalContext?: AdditionalContext | null, - evaluationValues?: Array, - thresholds?: Array -) => void; +type MetricThresholdAlertReporter = (params: { + id: string; + reason: string; + actionGroup: MetricThresholdActionGroup; + context: MetricThresholdAlertContext; + additionalContext?: AdditionalContext | null; + evaluationValues?: Array; + groups?: object[]; + thresholds?: Array; +}) => void; export const createMetricThresholdExecutor = (libs: InfraBackendLibs) => @@ -130,19 +134,21 @@ export const createMetricThresholdExecutor = throw new AlertsClientError(); } - const alertReporter: MetricThresholdAlertReporter = async ( + const alertReporter: MetricThresholdAlertReporter = async ({ id, reason, actionGroup, - contextWithoutAlertDetailsUrl, + context: contextWithoutAlertDetailsUrl, additionalContext, evaluationValues, - thresholds - ) => { + groups, + thresholds, + }) => { const { uuid, start } = alertsClient.report({ id, actionGroup, }); + const groupsPayload = typeof groups !== 'undefined' ? { [ALERT_GROUP]: groups } : {}; alertsClient.setAlertData({ id, @@ -150,6 +156,7 @@ export const createMetricThresholdExecutor = [ALERT_REASON]: reason, [ALERT_EVALUATION_VALUES]: evaluationValues, [ALERT_EVALUATION_THRESHOLD]: thresholds, + ...groupsPayload, ...flattenAdditionalContext(additionalContext), }, context: { @@ -197,7 +204,12 @@ export const createMetricThresholdExecutor = }), }; - await alertReporter(UNGROUPED_FACTORY_KEY, reason, actionGroupId, alertContext); + await alertReporter({ + id: UNGROUPED_FACTORY_KEY, + reason, + actionGroup: actionGroupId, + context: alertContext, + }); return { state: { @@ -252,13 +264,14 @@ export const createMetricThresholdExecutor = } const groupByKeysObjectMapping = getGroupByObject(params.groupBy, resultGroupSet); - const groups = [...resultGroupSet]; + const groupByMapping = getFormattedGroupBy(params.groupBy, resultGroupSet); + const groupArray = [...resultGroupSet]; const nextMissingGroups = new Set(); - const hasGroups = !isEqual(groups, [UNGROUPED_FACTORY_KEY]); + const hasGroups = !isEqual(groupArray, [UNGROUPED_FACTORY_KEY]); let scheduledActionsCount = 0; - // The key of `groups` is the alert instance ID. - for (const group of groups) { + // The key of `groupArray` is the alert instance ID. + for (const group of groupArray) { // AND logic; all criteria must be across the threshold const shouldAlertFire = alertResults.every((result) => result[group]?.shouldFire); const shouldAlertWarn = alertResults.every((result) => result[group]?.shouldWarn); @@ -340,6 +353,7 @@ export const createMetricThresholdExecutor = const evaluationValues = getEvaluationValues(alertResults, group); const thresholds = getThresholds(criteria); + const groups: Group[] = groupByMapping[group]; const alertContext = { alertState: stateToAlertMessage[nextState], @@ -378,15 +392,16 @@ export const createMetricThresholdExecutor = ...additionalContext, }; - await alertReporter( - `${group}`, + await alertReporter({ + id: `${group}`, reason, - actionGroupId, - alertContext, + actionGroup: actionGroupId, + context: alertContext, additionalContext, evaluationValues, - thresholds - ); + groups, + thresholds, + }); scheduledActionsCount++; } } diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_cell_renderer.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_cell_renderer.tsx deleted file mode 100644 index 765d910ede954..0000000000000 --- a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_cell_renderer.tsx +++ /dev/null @@ -1,17 +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 { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { CONTENT_FIELD, RESOURCE_FIELD } from '../../common/constants'; -import { renderCell } from '../components/virtual_columns/cell_renderer'; - -export const createCustomCellRenderer = ({ data }: { data: DataPublicPluginStart }) => { - return { - [CONTENT_FIELD]: renderCell(CONTENT_FIELD, { data }), - [RESOURCE_FIELD]: renderCell(RESOURCE_FIELD, { data }), - }; -}; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_column.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_column.tsx deleted file mode 100644 index 1e5cba9693eb5..0000000000000 --- a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_column.tsx +++ /dev/null @@ -1,14 +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 { CONTENT_FIELD, RESOURCE_FIELD } from '../../common/constants'; -import { renderColumn } from '../components/virtual_columns/column'; - -export const createCustomGridColumnsConfiguration = () => ({ - [CONTENT_FIELD]: renderColumn(CONTENT_FIELD), - [RESOURCE_FIELD]: renderColumn(RESOURCE_FIELD), -}); diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_control_column.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_control_column.tsx index 7fe8c0ae7aa7f..9bb71a3055a68 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_control_column.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_control_column.tsx @@ -15,6 +15,7 @@ import { import { EuiButtonIcon, EuiDataGridCellValueElementProps, EuiToolTip } from '@elastic/eui'; import type { DataTableRecord } from '@kbn/discover-utils/src/types'; import { useActor } from '@xstate/react'; +import { LogDocument } from '@kbn/discover-utils/src'; import { LogsExplorerControllerStateService } from '../state_machines/logs_explorer_controller'; import { degradedDocButtonLabelWhenNotPresent, @@ -24,7 +25,6 @@ import { } from '../components/common/translations'; import * as constants from '../../common/constants'; import { getStacktraceFields } from '../utils/get_stack_trace'; -import { LogDocument } from '../../common/document'; import { ActionsColumnTooltip } from '../components/virtual_columns/column_tooltips/actions_column_tooltip'; const ConnectedDegradedDocs = ({ diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_field_list.ts b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_field_list.ts deleted file mode 100644 index 93a414c39367e..0000000000000 --- a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/custom_field_list.ts +++ /dev/null @@ -1,24 +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 { DataViewField } from '@kbn/data-views-plugin/common'; -import * as constants from '../../common/constants'; - -export const smartFields = [ - new DataViewField({ - name: constants.RESOURCE_FIELD, - type: 'smart_field', - searchable: false, - aggregatable: false, - }), - new DataViewField({ - name: constants.CONTENT_FIELD, - type: 'smart_field', - searchable: false, - aggregatable: false, - }), -]; diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/logs_explorer_profile.tsx b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/logs_explorer_profile.tsx index 7fcc9d6a1cb9d..42a3838311a98 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/customizations/logs_explorer_profile.tsx +++ b/x-pack/plugins/observability_solution/logs_explorer/public/customizations/logs_explorer_profile.tsx @@ -15,9 +15,6 @@ import type { LogsExplorerController } from '../controller'; import type { LogsExplorerStartDeps } from '../types'; import { useKibanaContextForPluginProvider } from '../utils/use_kibana'; import { createCustomSearchBar } from './custom_search_bar'; -import { createCustomCellRenderer } from './custom_cell_renderer'; -import { createCustomGridColumnsConfiguration } from './custom_column'; -import { smartFields } from './custom_field_list'; import { createCustomUnifiedHistogram } from './custom_unified_histogram'; const LazyCustomDataSourceFilters = dynamic(() => import('./custom_data_source_filters')); @@ -83,8 +80,7 @@ export const createLogsExplorerProfileCustomizations = customizations.set({ id: 'data_table', - customCellRenderer: createCustomCellRenderer({ data }), - customGridColumnsConfiguration: createCustomGridColumnsConfiguration(), + logsEnabled: true, customControlColumnsConfiguration: await import('./custom_control_column').then((module) => module.createCustomControlColumnsConfiguration(service) ), @@ -92,9 +88,7 @@ export const createLogsExplorerProfileCustomizations = customizations.set({ id: 'field_list', - additionalFieldGroups: { - smartFields, - }, + logsFieldsEnabled: true, }); // Fix bug where filtering on histogram does not work diff --git a/x-pack/plugins/observability_solution/logs_explorer/public/utils/get_stack_trace.ts b/x-pack/plugins/observability_solution/logs_explorer/public/utils/get_stack_trace.ts index 58eb44a7744c9..ac264af2732aa 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/public/utils/get_stack_trace.ts +++ b/x-pack/plugins/observability_solution/logs_explorer/public/utils/get_stack_trace.ts @@ -5,9 +5,8 @@ * 2.0. */ -import { LogDocument, StackTraceFields } from '../../common/document'; +import { getFieldFromDoc, LogDocument, StackTraceFields } from '@kbn/discover-utils/src'; import * as constants from '../../common/constants'; -import { getFieldFromDoc } from './get_field_from_flattened_doc'; export const getStacktraceFields = (doc: LogDocument): StackTraceFields => { const errorStackTrace = getFieldFromDoc(doc, constants.ERROR_STACK_TRACE); diff --git a/x-pack/plugins/observability_solution/logs_explorer/tsconfig.json b/x-pack/plugins/observability_solution/logs_explorer/tsconfig.json index cb04be5ccf518..b30605fd567fd 100644 --- a/x-pack/plugins/observability_solution/logs_explorer/tsconfig.json +++ b/x-pack/plugins/observability_solution/logs_explorer/tsconfig.json @@ -19,13 +19,11 @@ "@kbn/core-ui-settings-browser", "@kbn/core-ui-settings-common", "@kbn/core", - "@kbn/custom-icons", "@kbn/data-plugin", "@kbn/data-views-plugin", "@kbn/deeplinks-observability", "@kbn/discover-plugin", "@kbn/discover-utils", - "@kbn/elastic-agent-utils", "@kbn/embeddable-plugin", "@kbn/es-query", "@kbn/field-formats-plugin", diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts index 9d39bcba4a926..2b1a1467bbc9c 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_api.ts @@ -26,6 +26,7 @@ export const MetricsAPIRequestRT = rt.intersection([ }), rt.partial({ groupBy: rt.array(groupByRT), + groupInstance: rt.array(groupByRT), modules: rt.array(rt.string), afterKey: rt.union([rt.null, afterKeyObjectRT]), limit: rt.union([rt.number, rt.null]), diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_explorer.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_explorer.ts index d735e398e6661..4f1ea80a1a34f 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_explorer.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/http_api/metrics_explorer.ts @@ -91,6 +91,7 @@ export const afterKeyObjectRT = rt.record(rt.string, rt.union([rt.string, rt.nul export const metricsExplorerRequestBodyOptionalFieldsRT = rt.partial({ groupBy: rt.union([groupByRT, rt.array(groupByRT)]), + groupInstance: rt.union([groupByRT, rt.array(groupByRT)]), afterKey: rt.union([rt.string, rt.null, rt.undefined, afterKeyObjectRT]), limit: rt.union([rt.number, rt.null, rt.undefined]), filterQuery: rt.union([rt.string, rt.null, rt.undefined]), diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/index.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/index.ts index e50d020d1d4f7..a113c6fd1802c 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/index.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/index.ts @@ -11,7 +11,7 @@ import { InventoryModel } from '../types'; export { containerSnapshotMetricTypes } from './metrics'; -export const container: InventoryModel = { +export const container: InventoryModel = { id: 'container', displayName: i18n.translate('xpack.metricsData.inventoryModel.container.displayName', { defaultMessage: 'Docker Containers', diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/charts/cpu.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/charts/cpu.ts new file mode 100644 index 0000000000000..36c5ddaf91acd --- /dev/null +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/charts/cpu.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { + CPU_USAGE_LABEL, + DEFAULT_XY_FITTING_FUNCTION, + DEFAULT_XY_HIDDEN_AXIS_TITLE, + DEFAULT_XY_HIDDEN_LEGEND, + DEFAULT_XY_YBOUNDS, +} from '../../../shared/charts/constants'; +import { LensConfigWithId } from '../../../types'; +import { formulas } from '../formulas'; + +const dockerContainerCpuUsageXY: LensConfigWithId = { + id: 'cpuUsage', + chartType: 'xy', + title: CPU_USAGE_LABEL, + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.dockerContainerCpuUsage], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + ...DEFAULT_XY_YBOUNDS, +}; + +const k8sContainerCpuUsageXY: LensConfigWithId = { + id: 'k8sCpuUsage', + chartType: 'xy', + title: CPU_USAGE_LABEL, + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.k8sContainerCpuUsage], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, + ...DEFAULT_XY_YBOUNDS, +}; + +const dockerContainerCpuUsageMetric: LensConfigWithId = { + id: 'cpuUsage', + chartType: 'metric', + title: CPU_USAGE_LABEL, + trendLine: true, + ...formulas.dockerContainerCpuUsage, +}; + +const containerK8sCpuUsageMetric: LensConfigWithId = { + id: 'k8sCpuUsage', + chartType: 'metric', + title: CPU_USAGE_LABEL, + trendLine: true, + ...formulas.k8sContainerCpuUsage, +}; + +export const cpu = { + xy: { + dockerContainerCpuUsage: dockerContainerCpuUsageXY, + k8sContainerCpuUsage: k8sContainerCpuUsageXY, + }, + metric: { + dockerContainerCpuUsage: dockerContainerCpuUsageMetric, + k8sContainerCpuUsage: containerK8sCpuUsageMetric, + }, +} as const; diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/charts/index.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/charts/index.ts new file mode 100644 index 0000000000000..6a83e00c9c5c8 --- /dev/null +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/charts/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { cpu } from './cpu'; +import { memory } from './memory'; + +export const charts = { + cpu, + memory, +} as const; + +export type ContainerCharts = typeof charts; diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/charts/memory.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/charts/memory.ts new file mode 100644 index 0000000000000..45ce080d7f448 --- /dev/null +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/charts/memory.ts @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { LensConfigWithId } from '../../../types'; +import { + DEFAULT_XY_FITTING_FUNCTION, + DEFAULT_XY_HIDDEN_AXIS_TITLE, + DEFAULT_XY_HIDDEN_LEGEND, + DEFAULT_XY_YBOUNDS, + MEMORY_USAGE_LABEL, +} from '../../../shared/charts/constants'; +import { formulas } from '../formulas'; + +const dockerContainerMemoryUsageXY: LensConfigWithId = { + id: 'memoryUsage', + chartType: 'xy', + title: MEMORY_USAGE_LABEL, + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.dockerContainerMemoryUsage], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_YBOUNDS, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, +}; + +const k8sContainerMemoryUsageXY: LensConfigWithId = { + id: 'k8sMemoryUsage', + chartType: 'xy', + title: MEMORY_USAGE_LABEL, + layers: [ + { + seriesType: 'line', + type: 'series', + xAxis: '@timestamp', + yAxis: [formulas.k8sContainerMemoryUsage], + }, + ], + ...DEFAULT_XY_FITTING_FUNCTION, + ...DEFAULT_XY_HIDDEN_LEGEND, + ...DEFAULT_XY_YBOUNDS, + ...DEFAULT_XY_HIDDEN_AXIS_TITLE, +}; + +const dockerContainerMemoryUsageMetric: LensConfigWithId = { + id: 'memoryUsage', + chartType: 'metric', + title: MEMORY_USAGE_LABEL, + trendLine: true, + ...formulas.dockerContainerMemoryUsage, +}; + +const k8sContainerMemoryUsageMetric: LensConfigWithId = { + id: 'k8sMemoryUsage', + chartType: 'metric', + title: MEMORY_USAGE_LABEL, + trendLine: true, + ...formulas.k8sContainerMemoryUsage, +}; + +export const memory = { + xy: { + dockerContainerMemoryUsage: dockerContainerMemoryUsageXY, + k8sContainerMemoryUsage: k8sContainerMemoryUsageXY, + }, + metric: { + dockerContainerMemoryUsage: dockerContainerMemoryUsageMetric, + k8sContainerMemoryUsage: k8sContainerMemoryUsageMetric, + }, +}; diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/formulas/cpu.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/formulas/cpu.ts new file mode 100644 index 0000000000000..283f139d31a7a --- /dev/null +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/formulas/cpu.ts @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { LensBaseLayer } from '@kbn/lens-embeddable-utils/config_builder'; +import { CPU_USAGE_LABEL } from '../../../shared/charts/constants'; + +export const dockerContainerCpuUsage: LensBaseLayer = { + label: CPU_USAGE_LABEL, + value: 'average(docker.cpu.total.pct)', + format: 'percent', + decimals: 1, +}; + +export const k8sContainerCpuUsage: LensBaseLayer = { + label: CPU_USAGE_LABEL, + value: 'average(kubernetes.container.cpu.usage.limit.pct)', + format: 'percent', + decimals: 1, +}; diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/formulas/index.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/formulas/index.ts new file mode 100644 index 0000000000000..2f5e4f7975f7a --- /dev/null +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/formulas/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { dockerContainerCpuUsage, k8sContainerCpuUsage } from './cpu'; +import { dockerContainerMemoryUsage, k8sContainerMemoryUsage } from './memory'; + +export const formulas = { + dockerContainerCpuUsage, + dockerContainerMemoryUsage, + k8sContainerCpuUsage, + k8sContainerMemoryUsage, +} as const; + +export type ContainerFormulas = typeof formulas; diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/formulas/memory.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/formulas/memory.ts new file mode 100644 index 0000000000000..827f06e4fdb0d --- /dev/null +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/formulas/memory.ts @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { LensBaseLayer } from '@kbn/lens-embeddable-utils/config_builder'; +import { MEMORY_USAGE_LABEL } from '../../../shared/charts/constants'; + +export const dockerContainerMemoryUsage: LensBaseLayer = { + label: MEMORY_USAGE_LABEL, + value: 'average(docker.memory.usage.pct)', + format: 'percent', + decimals: 1, +}; + +export const k8sContainerMemoryUsage: LensBaseLayer = { + label: MEMORY_USAGE_LABEL, + value: 'average(kubernetes.container.memory.usage.limit.pct)', + format: 'percent', + decimals: 1, +}; diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/index.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/index.ts index eb0678890ad3a..faa848192fd46 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/index.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/container/metrics/index.ts @@ -5,22 +5,23 @@ * 2.0. */ -import { InventoryMetrics } from '../../types'; +import { InventoryMetricsWithCharts } from '../../types'; import { cpu } from './snapshot/cpu'; import { memory } from './snapshot/memory'; import { rx } from './snapshot/rx'; import { tx } from './snapshot/tx'; - -import { containerOverview } from './tsvb/container_overview'; -import { containerCpuUsage } from './tsvb/container_cpu_usage'; import { containerCpuKernel } from './tsvb/container_cpu_kernel'; +import { containerCpuUsage } from './tsvb/container_cpu_usage'; import { containerDiskIOOps } from './tsvb/container_diskio_ops'; import { containerDiskIOBytes } from './tsvb/container_disk_io_bytes'; -import { containerMemory } from './tsvb/container_memory'; -import { containerNetworkTraffic } from './tsvb/container_network_traffic'; -import { containerK8sOverview } from './tsvb/container_k8s_overview'; import { containerK8sCpuUsage } from './tsvb/container_k8s_cpu_usage'; import { containerK8sMemoryUsage } from './tsvb/container_k8s_memory_usage'; +import { containerK8sOverview } from './tsvb/container_k8s_overview'; +import { containerMemory } from './tsvb/container_memory'; +import { containerNetworkTraffic } from './tsvb/container_network_traffic'; +import { containerOverview } from './tsvb/container_overview'; +import type { ContainerFormulas } from './formulas'; +import { ContainerCharts } from './charts'; const containerSnapshotMetrics = { cpu, memory, rx, tx }; @@ -28,7 +29,7 @@ export const containerSnapshotMetricTypes = Object.keys(containerSnapshotMetrics keyof typeof containerSnapshotMetrics >; -export const metrics: InventoryMetrics = { +export const metrics: InventoryMetricsWithCharts = { tsvb: { containerOverview, containerCpuUsage, @@ -42,6 +43,8 @@ export const metrics: InventoryMetrics = { containerK8sMemoryUsage, }, snapshot: containerSnapshotMetrics, + getFormulas: async () => await import('./formulas').then(({ formulas }) => formulas), + getCharts: async () => await import('./charts').then(({ charts }) => charts), defaultSnapshot: 'cpu', defaultTimeRangeInSeconds: 3600, // 1 hour }; diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/cpu.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/cpu.ts index a12637d6c9a2c..bfa9c1f9dec60 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/cpu.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/cpu.ts @@ -5,8 +5,9 @@ * 2.0. */ -import { i18n } from '@kbn/i18n'; import { + CPU_USAGE_LABEL, + LOAD_LABEL, DEFAULT_XY_FITTING_FUNCTION, DEFAULT_XY_HIDDEN_AXIS_TITLE, DEFAULT_XY_HIDDEN_LEGEND, @@ -19,9 +20,7 @@ import { formulas } from '../formulas'; const cpuUsageBreakdown: LensConfigWithId = { id: 'cpuUsageBreakdown', chartType: 'xy', - title: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.cpuUsage', { - defaultMessage: 'CPU Usage', - }), + title: CPU_USAGE_LABEL, layers: [ { seriesType: 'area', @@ -47,9 +46,7 @@ const cpuUsageBreakdown: LensConfigWithId = { const loadBreakdown: LensConfigWithId = { id: 'loadBreakdown', chartType: 'xy', - title: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.load', { - defaultMessage: 'Load', - }), + title: LOAD_LABEL, layers: [ { seriesType: 'area', diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/disk.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/disk.ts index a73c9f274b40b..112de73066518 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/disk.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/disk.ts @@ -14,14 +14,15 @@ import { DEFAULT_XY_HIDDEN_LEGEND, DEFAULT_XY_LEGEND, DEFAULT_XY_YBOUNDS, + DISK_IOPS_LABEL, + DISK_THROUGHPUT_LABEL, + DISK_USAGE_BY_MOUNT_POINT_LABEL, } from '../../../shared/charts/constants'; const diskIOReadWrite: LensConfigWithId = { id: 'diskIOReadWrite', chartType: 'xy', - title: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.diskIOPS', { - defaultMessage: 'Disk IOPS', - }), + title: DISK_IOPS_LABEL, layers: [ { seriesType: 'area', @@ -51,9 +52,7 @@ const diskIOReadWrite: LensConfigWithId = { const diskUsageByMountPoint: LensConfigWithId = { id: 'diskUsageByMountPoint', chartType: 'xy', - title: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.diskUsageByMountingPoint', { - defaultMessage: 'Disk Usage by Mount Point', - }), + title: DISK_USAGE_BY_MOUNT_POINT_LABEL, layers: [ { seriesType: 'area', @@ -86,9 +85,7 @@ const diskUsageByMountPoint: LensConfigWithId = { const diskThroughputReadWrite: LensConfigWithId = { id: 'diskThroughputReadWrite', chartType: 'xy', - title: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.diskThroughput', { - defaultMessage: 'Disk Throughput', - }), + title: DISK_THROUGHPUT_LABEL, layers: [ { seriesType: 'area', diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/memory.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/memory.ts index 91e5fcff000e8..8113848810fe8 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/memory.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/memory.ts @@ -14,14 +14,13 @@ import { DEFAULT_XY_HIDDEN_LEGEND, DEFAULT_XY_LEGEND, DEFAULT_XY_YBOUNDS, + MEMORY_USAGE_LABEL, } from '../../../shared/charts/constants'; const memoryUsageBreakdown: LensConfigWithId = { id: 'memoryUsageBreakdown', chartType: 'xy', - title: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.memoryUsage', { - defaultMessage: 'Memory Usage', - }), + title: MEMORY_USAGE_LABEL, layers: [ { seriesType: 'area', diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/network.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/network.ts index e9a4ea0351779..d94dd48db8370 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/network.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/charts/network.ts @@ -13,14 +13,13 @@ import { DEFAULT_XY_HIDDEN_AXIS_TITLE, DEFAULT_XY_HIDDEN_LEGEND, DEFAULT_XY_LEGEND, + NETWORK_LABEL, } from '../../../shared/charts/constants'; const rxTx: LensConfigWithId = { id: 'rxTx', chartType: 'xy', - title: i18n.translate('xpack.metricsData.assetDetails.metricsCharts.network', { - defaultMessage: 'Network', - }), + title: NETWORK_LABEL, layers: [ { seriesType: 'area', diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/formulas/cpu.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/formulas/cpu.ts index 10256dcb1cbf5..fa75dc071666c 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/formulas/cpu.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/formulas/cpu.ts @@ -7,6 +7,13 @@ import { i18n } from '@kbn/i18n'; import type { LensBaseLayer } from '@kbn/lens-embeddable-utils/config_builder'; +import { + CPU_USAGE_LABEL, + LOAD_15M_LABEL, + LOAD_1M_LABEL, + LOAD_5M_LABEL, + NORMALIZED_LOAD_LABEL, +} from '../../../shared/charts/constants'; export const cpuUsageIowait: LensBaseLayer = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.cpuUsage.iowaitLabel', { @@ -72,45 +79,35 @@ export const cpuUsageUser: LensBaseLayer = { }; export const cpuUsage: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.cpuUsage', { - defaultMessage: 'CPU Usage', - }), + label: CPU_USAGE_LABEL, value: '(average(system.cpu.user.pct) + average(system.cpu.system.pct)) / max(system.cpu.cores)', format: 'percent', decimals: 0, }; export const load1m: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.load1m', { - defaultMessage: 'Load (1m)', - }), + label: LOAD_1M_LABEL, value: 'average(system.load.1)', format: 'number', decimals: 1, }; export const load5m: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.load5m', { - defaultMessage: 'Load (5m)', - }), + label: LOAD_5M_LABEL, value: 'average(system.load.5)', format: 'number', decimals: 1, }; export const load15m: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.load15m', { - defaultMessage: 'Load (15m)', - }), + label: LOAD_15M_LABEL, value: 'average(system.load.15)', format: 'number', decimals: 1, }; export const normalizedLoad1m: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.normalizedLoad1m', { - defaultMessage: 'Normalized Load', - }), + label: NORMALIZED_LOAD_LABEL, value: 'average(system.load.1) / max(system.load.cores)', format: 'percent', decimals: 0, diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/formulas/disk.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/formulas/disk.ts index 6d6f644e19ace..9eae6986a6065 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/formulas/disk.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/formulas/disk.ts @@ -5,13 +5,20 @@ * 2.0. */ -import { i18n } from '@kbn/i18n'; import type { LensBaseLayer } from '@kbn/lens-embeddable-utils/config_builder'; +import { + DISK_READ_IOPS_LABEL, + DISK_READ_THROUGHPUT_LABEL, + DISK_SPACE_AVAILABILITY_LABEL, + DISK_SPACE_AVAILABLE_LABEL, + DISK_USAGE_AVERAGE_LABEL, + DISK_USAGE_LABEL, + DISK_WRITE_IOPS_LABEL, + DISK_WRITE_THROUGHPUT_LABEL, +} from '../../../shared/charts/constants'; export const diskIORead: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.diskIORead', { - defaultMessage: 'Disk Read IOPS', - }), + label: DISK_READ_IOPS_LABEL, value: "counter_rate(max(system.diskio.read.count), kql='system.diskio.read.count: *')", format: 'number', decimals: 0, @@ -19,9 +26,7 @@ export const diskIORead: LensBaseLayer = { }; export const diskReadThroughput: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.diskReadThroughput', { - defaultMessage: 'Disk Read Throughput', - }), + label: DISK_READ_THROUGHPUT_LABEL, value: "counter_rate(max(system.diskio.read.bytes), kql='system.diskio.read.bytes: *')", format: 'bytes', decimals: 1, @@ -29,45 +34,35 @@ export const diskReadThroughput: LensBaseLayer = { }; export const diskSpaceAvailable: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.diskSpaceAvailable', { - defaultMessage: 'Disk Space Available', - }), + label: DISK_SPACE_AVAILABLE_LABEL, value: 'average(system.filesystem.free)', format: 'bytes', decimals: 0, }; export const diskSpaceAvailability: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.diskSpaceAvailability', { - defaultMessage: 'Disk Space Availability', - }), + label: DISK_SPACE_AVAILABILITY_LABEL, value: '1 - average(system.filesystem.used.pct)', format: 'percent', decimals: 0, }; export const diskUsage: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.diskUsage', { - defaultMessage: 'Disk Usage', - }), + label: DISK_USAGE_LABEL, value: 'max(system.filesystem.used.pct)', format: 'percent', decimals: 0, }; export const diskUsageAverage: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.diskUsageAverage', { - defaultMessage: 'Disk Usage Average', - }), + label: DISK_USAGE_AVERAGE_LABEL, value: 'average(system.filesystem.used.pct)', format: 'percent', decimals: 0, }; export const diskIOWrite: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.diskIOWrite', { - defaultMessage: 'Disk Write IOPS', - }), + label: DISK_WRITE_IOPS_LABEL, value: "counter_rate(max(system.diskio.write.count), kql='system.diskio.write.count: *')", format: 'number', decimals: 0, @@ -75,9 +70,7 @@ export const diskIOWrite: LensBaseLayer = { }; export const diskWriteThroughput: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.diskWriteThroughput', { - defaultMessage: 'Disk Write Throughput', - }), + label: DISK_WRITE_THROUGHPUT_LABEL, value: "counter_rate(max(system.diskio.write.bytes), kql='system.diskio.write.bytes: *')", format: 'bytes', decimals: 1, diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/formulas/memory.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/formulas/memory.ts index 7b3afb4894e12..9c1d285d1b879 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/formulas/memory.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/host/metrics/formulas/memory.ts @@ -7,6 +7,7 @@ import { i18n } from '@kbn/i18n'; import type { LensBaseLayer } from '@kbn/lens-embeddable-utils/config_builder'; +import { MEMORY_FREE_LABEL, MEMORY_USAGE_LABEL } from '../../../shared/charts/constants'; export const memoryCache: LensBaseLayer = { label: i18n.translate('xpack.metricsData.assetDetails.formulas.metric.label.cache', { @@ -18,9 +19,7 @@ export const memoryCache: LensBaseLayer = { }; export const memoryFree: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.memoryFree', { - defaultMessage: 'Memory Free', - }), + label: MEMORY_FREE_LABEL, value: 'max(system.memory.total) - average(system.memory.actual.used.bytes)', format: 'bytes', decimals: 1, @@ -36,9 +35,7 @@ export const memoryFreeExcludingCache: LensBaseLayer = { }; export const memoryUsage: LensBaseLayer = { - label: i18n.translate('xpack.metricsData.assetDetails.formulas.memoryUsage', { - defaultMessage: 'Memory Usage', - }), + label: MEMORY_USAGE_LABEL, value: 'average(system.memory.actual.used.pct)', format: 'percent', diff --git a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/shared/charts/constants.ts b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/shared/charts/constants.ts index c835b1239769b..6d6d22c116f43 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/shared/charts/constants.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/common/inventory_models/shared/charts/constants.ts @@ -5,6 +5,7 @@ * 2.0. */ +import { i18n } from '@kbn/i18n'; import type { LensXYConfigBase } from '@kbn/lens-embeddable-utils/config_builder'; export const DEFAULT_XY_FITTING_FUNCTION: Pick = { @@ -38,3 +39,134 @@ export const DEFAULT_XY_HIDDEN_AXIS_TITLE: Pick 0; + const groupInstanceFilter = + options.groupInstance?.reduce>>((acc, group, index) => { + const key = options.groupBy?.[index]; + if (key && group) { + acc.push({ term: { [key]: group } }); + } + return acc; + }, []) ?? []; const filter: Array> = [ { range: { @@ -50,6 +58,7 @@ export const query = async ( }, }, ...(options.groupBy?.map((field) => ({ exists: { field } })) ?? []), + ...groupInstanceFilter, ]; const params = { diff --git a/x-pack/plugins/observability_solution/metrics_data_access/server/routes/metrics_explorer/lib/convert_request_to_metrics_api_options.test.ts b/x-pack/plugins/observability_solution/metrics_data_access/server/routes/metrics_explorer/lib/convert_request_to_metrics_api_options.test.ts index fdf58fa848f8f..71a925f7ab1d9 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/server/routes/metrics_explorer/lib/convert_request_to_metrics_api_options.test.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/server/routes/metrics_explorer/lib/convert_request_to_metrics_api_options.test.ts @@ -83,6 +83,34 @@ describe('convertRequestToMetricsAPIOptions', () => { }); }); + it('should work with groupBy and groupInstance as string', () => { + expect( + convertRequestToMetricsAPIOptions({ + ...BASE_REQUEST, + groupBy: 'host.name', + groupInstance: 'host-1', + }) + ).toEqual({ + ...BASE_METRICS_UI_OPTIONS, + groupBy: ['host.name'], + groupInstance: ['host-1'], + }); + }); + + it('should work with groupInstance arrays', () => { + expect( + convertRequestToMetricsAPIOptions({ + ...BASE_REQUEST, + groupBy: ['host.name', 'cloud.availability_zone'], + groupInstance: ['host-1', 'cloud.availability_zone-1'], + }) + ).toEqual({ + ...BASE_METRICS_UI_OPTIONS, + groupBy: ['host.name', 'cloud.availability_zone'], + groupInstance: ['host-1', 'cloud.availability_zone-1'], + }); + }); + it('should work with filterQuery json string', () => { const filter = { bool: { filter: [{ match: { 'host.name': 'example-01' } }] } }; expect( diff --git a/x-pack/plugins/observability_solution/metrics_data_access/server/routes/metrics_explorer/lib/convert_request_to_metrics_api_options.ts b/x-pack/plugins/observability_solution/metrics_data_access/server/routes/metrics_explorer/lib/convert_request_to_metrics_api_options.ts index 144be0565e298..f705feb0a0652 100644 --- a/x-pack/plugins/observability_solution/metrics_data_access/server/routes/metrics_explorer/lib/convert_request_to_metrics_api_options.ts +++ b/x-pack/plugins/observability_solution/metrics_data_access/server/routes/metrics_explorer/lib/convert_request_to_metrics_api_options.ts @@ -40,6 +40,12 @@ export const convertRequestToMetricsAPIOptions = ( metricsApiOptions.groupBy = isArray(options.groupBy) ? options.groupBy : [options.groupBy]; } + if (options.groupInstance) { + metricsApiOptions.groupInstance = isArray(options.groupInstance) + ? options.groupInstance + : [options.groupInstance]; + } + if (options.filterQuery) { try { const filterObject = JSON.parse(options.filterQuery); diff --git a/x-pack/plugins/observability_solution/observability/common/index.ts b/x-pack/plugins/observability_solution/observability/common/index.ts index e71a8d2bc5777..d7d5672b95ec3 100644 --- a/x-pack/plugins/observability_solution/observability/common/index.ts +++ b/x-pack/plugins/observability_solution/observability/common/index.ts @@ -32,6 +32,7 @@ export { apmTraceExplorerTab, apmLabsButton, enableInfrastructureHostsView, + enableInfrastructureContainerAssetView, enableInfrastructureProfilingIntegration, enableInfrastructureAssetCustomDashboards, enableAwsLambdaMetrics, diff --git a/x-pack/plugins/observability_solution/observability/common/ui_settings_keys.ts b/x-pack/plugins/observability_solution/observability/common/ui_settings_keys.ts index 46bbfa2c08757..0049afae529ee 100644 --- a/x-pack/plugins/observability_solution/observability/common/ui_settings_keys.ts +++ b/x-pack/plugins/observability_solution/observability/common/ui_settings_keys.ts @@ -21,6 +21,8 @@ export const enableInfrastructureProfilingIntegration = 'observability:enableInfrastructureProfilingIntegration'; export const enableInfrastructureAssetCustomDashboards = 'observability:enableInfrastructureAssetCustomDashboards'; +export const enableInfrastructureContainerAssetView = + 'observability:enableInfrastructureContainerAssetView'; export const enableAwsLambdaMetrics = 'observability:enableAwsLambdaMetrics'; export const enableAgentExplorerView = 'observability:apmAgentExplorerView'; export const apmEnableTableSearchBar = 'observability:apmEnableTableSearchBar'; diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx index 29be65499b826..a30511c891e7b 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.test.tsx @@ -107,7 +107,7 @@ describe('AlertDetailsAppSection', () => { it('should render rule and alert data', async () => { const result = renderComponent(); - expect((await result.findByTestId('thresholdAlertOverviewSection')).children.length).toBe(7); + expect((await result.findByTestId('thresholdAlertOverviewSection')).children.length).toBe(6); expect(result.getByTestId('thresholdRule-2000-2500')).toBeTruthy(); }); @@ -183,7 +183,7 @@ describe('AlertDetailsAppSection', () => { { ['kibana.alert.end']: '2023-03-28T14:40:00.000Z' } ); - expect(alertDetailsAppSectionComponent.getAllByTestId('RuleConditionChart').length).toBe(7); + expect(alertDetailsAppSectionComponent.getAllByTestId('RuleConditionChart').length).toBe(6); expect(mockedRuleConditionChart.mock.calls[0]).toMatchSnapshot(); }); diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx index 0bb3ef31da99e..bcfdf2fd89986 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_details_app_section.tsx @@ -39,7 +39,6 @@ import type { import moment from 'moment'; import { LOGS_EXPLORER_LOCATOR_ID, LogsExplorerLocatorParams } from '@kbn/deeplinks-observability'; import { TimeRange } from '@kbn/es-query'; -import { AlertHistoryChart } from './alert_history'; import { useLicense } from '../../../../hooks/use_license'; import { useKibana } from '../../../../utils/kibana_react'; import { getGroupFilters } from '../../../../../common/custom_threshold_rule/helpers/get_group'; @@ -293,7 +292,6 @@ export default function AlertDetailsAppSection({ {hasLogRateAnalysisLicense && ( )} -
); } diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_history.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_history.tsx deleted file mode 100644 index b75b489cd86db..0000000000000 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/alert_history.tsx +++ /dev/null @@ -1,224 +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 moment from 'moment'; -import React, { useState } from 'react'; -import { v4 as uuidv4 } from 'uuid'; -import { RuleTypeParams } from '@kbn/alerting-plugin/common'; -import { EventAnnotationConfig } from '@kbn/event-annotation-common'; -import { DataView } from '@kbn/data-views-plugin/common'; -import { - EuiPanel, - EuiFlexGroup, - EuiFlexItem, - EuiTitle, - EuiText, - EuiSpacer, - EuiLoadingSpinner, - useEuiTheme, - EuiSelect, -} from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { ALERT_GROUP, ALERT_INSTANCE_ID, type AlertConsumers } from '@kbn/rule-data-utils'; -import { useAlertsHistory } from '@kbn/observability-alert-details'; -import { convertTo } from '../../../../../common/utils/formatters'; -import { getGroupFilters } from '../../../../../common/custom_threshold_rule/helpers/get_group'; -import { CustomMetricExpressionParams } from '../../../../../common/custom_threshold_rule/types'; -import { useKibana } from '../../../../utils/kibana_react'; -import { AlertParams } from '../../types'; -import { RuleConditionChart } from '../rule_condition_chart/rule_condition_chart'; -import { CustomThresholdAlert, CustomThresholdRule } from '../types'; -import { generateChartTitleAndTooltip } from './helpers/generate_chart_title_and_tooltip'; - -const DEFAULT_INTERVAL = '1d'; -const SERIES_TYPE = 'bar_stacked'; - -interface Props { - alert: CustomThresholdAlert; - rule: CustomThresholdRule; - dataView?: DataView; -} - -const dateRange = { - from: 'now-30d', - to: 'now+1d', -}; - -export function AlertHistoryChart({ rule, dataView, alert }: Props) { - const { http, notifications } = useKibana().services; - const { euiTheme } = useEuiTheme(); - const ruleParams = rule.params as RuleTypeParams & AlertParams; - const groups = alert.fields[ALERT_GROUP]; - const instanceId = alert.fields[ALERT_INSTANCE_ID]; - const featureIds = [rule.consumer as AlertConsumers]; - const options = rule.params.criteria.map((criterion, index) => { - const { title, tooltip } = generateChartTitleAndTooltip(criterion, 27); - return { - text: title, - title: tooltip, - }; - }); - const [selectedCriterion, setSelectedCriterion] = useState( - rule.params.criteria[0] - ); - - const { - data: { histogramTriggeredAlerts, avgTimeToRecoverUS, totalTriggeredAlerts }, - isLoading, - isError, - } = useAlertsHistory({ - http, - featureIds, - ruleId: rule.id, - dateRange, - instanceId, - }); - - if (isError) { - notifications?.toasts.addDanger({ - title: i18n.translate('xpack.observability.customThreshold.alertHistory.error.toastTitle', { - defaultMessage: 'Alerts history chart error', - }), - text: i18n.translate( - 'xpack.observability.customThreshold.alertHistory.error.toastDescription', - { - defaultMessage: `An error occurred when fetching alert history chart data`, - } - ), - }); - } - - const annotations: EventAnnotationConfig[] = - histogramTriggeredAlerts - ?.filter((annotation) => annotation.doc_count > 0) - .map((annotation) => { - return { - type: 'manual', - id: uuidv4(), - label: String(annotation.doc_count), - key: { - type: 'point_in_time', - timestamp: moment(new Date(annotation.key_as_string!)) - .startOf('day') - .add(12, 'h') - .toISOString(), - }, - lineWidth: 2, - color: euiTheme.colors.danger, - icon: 'alert', - textVisibility: true, - }; - }) || []; - - return ( - - - - - -

- {i18n.translate('xpack.observability.customThreshold.alertHistory.chartTitle', { - defaultMessage: 'Alerts history', - })} -

-
-
- - - {i18n.translate('xpack.observability.customThreshold.alertHistory.last30days', { - defaultMessage: 'Last 30 days', - })} - - -
- {rule.params.criteria.length > 1 && ( - - setSelectedCriterion( - rule.params.criteria[ - options.map((option) => option.text).indexOf(e.target.value) ?? 0 - ] - ) - } - /> - )} -
- - - - - - - -

- {isLoading ? : totalTriggeredAlerts || '-'} -

-
-
-
- - - {i18n.translate( - 'xpack.observability.customThreshold.alertHistory.alertsTriggered', - { - defaultMessage: 'Alerts triggered', - } - )} - - -
-
- - - - -

- {isLoading ? ( - - ) : avgTimeToRecoverUS ? ( - convertTo({ - unit: 'minutes', - microseconds: avgTimeToRecoverUS, - extended: true, - }).formatted - ) : ( - '-' - )} -

-
-
-
- - - {i18n.translate('xpack.observability.customThreshold.alertHistory.avgTimeToRecover', { - defaultMessage: 'Avg time to recover', - })} - - -
-
- - -
- ); -} diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx index a2ee142e51d09..9bf67a56b0829 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/alert_details_app_section/log_rate_analysis.tsx @@ -14,12 +14,12 @@ import { type LogRateAnalysisType, } from '@kbn/aiops-log-rate-analysis/log_rate_analysis_type'; import { LogRateAnalysisContent, type LogRateAnalysisResultsData } from '@kbn/aiops-plugin/public'; -import { Rule } from '@kbn/alerting-plugin/common'; import { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import type { Message } from '@kbn/observability-ai-assistant-plugin/public'; import { ALERT_END } from '@kbn/rule-data-utils'; +import { Rule } from '@kbn/triggers-actions-ui-plugin/public'; import { CustomThresholdRuleTypeParams } from '../../types'; import { TopAlert } from '../../../..'; import { Color, colorTransformer } from '../../../../../common/custom_threshold_rule/color_palette'; diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/types.ts b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/types.ts index b6c930527087d..5f938d66a7138 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/types.ts +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/components/types.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { Rule } from '@kbn/alerting-plugin/common'; +import type { Rule } from '@kbn/triggers-actions-ui-plugin/public'; import { TopAlert } from '../../..'; import { CustomThresholdAlertFields, CustomThresholdRuleTypeParams } from '../types'; diff --git a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/mocks/custom_threshold_rule.ts b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/mocks/custom_threshold_rule.ts index 8d79ddd225ba5..045c04219801e 100644 --- a/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/mocks/custom_threshold_rule.ts +++ b/x-pack/plugins/observability_solution/observability/public/components/custom_threshold/mocks/custom_threshold_rule.ts @@ -16,12 +16,11 @@ export const buildCustomThresholdRule = ( rule: Partial = {} ): CustomThresholdRule => { return { - alertTypeId: 'metrics.alert.threshold', + ruleTypeId: 'metrics.alert.threshold', createdBy: 'admin', updatedBy: 'admin', createdAt: new Date('2023-02-20T15:25:32.125Z'), updatedAt: new Date('2023-03-02T16:24:41.177Z'), - apiKey: 'apiKey', apiKeyOwner: 'admin', notifyWhen: null, muteAll: false, diff --git a/x-pack/plugins/observability_solution/observability/public/index.ts b/x-pack/plugins/observability_solution/observability/public/index.ts index 6542e95f20123..b6da758f02cd8 100644 --- a/x-pack/plugins/observability_solution/observability/public/index.ts +++ b/x-pack/plugins/observability_solution/observability/public/index.ts @@ -41,6 +41,7 @@ export { enableComparisonByDefault, apmServiceGroupMaxNumberOfServices, enableInfrastructureHostsView, + enableInfrastructureContainerAssetView, enableAgentExplorerView, apmEnableTableSearchBar, } from '../common/ui_settings_keys'; diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.test.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.test.tsx index cbecbfa4530ce..466e68267424d 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.test.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.test.tsx @@ -53,7 +53,7 @@ const mockObservabilityAIAssistant = observabilityAIAssistantPluginMock.createSt const mockKibana = () => { useKibanaMock.mockReturnValue({ services: { - ...kibanaStartMock.startContract(), + ...kibanaStartMock.startContract().services, cases: casesPluginMock.createStartContract(), application: { currentAppId$: from('mockedApp') }, http: { @@ -63,9 +63,6 @@ const mockKibana = () => { }, observabilityAIAssistant: mockObservabilityAIAssistant, theme: {}, - triggersActionsUi: { - ruleTypeRegistry, - }, }, }); }; @@ -78,6 +75,7 @@ jest.mock('../../hooks/use_fetch_rule', () => { rule: { id: 'ruleId', name: 'ruleName', + consumer: 'logs', }, }), }; @@ -139,7 +137,7 @@ describe('Alert details', () => { expect(alertDetails.queryByTestId('alertDetailsError')).toBeFalsy(); expect(alertDetails.queryByTestId('alertDetailsPageTitle')).toBeTruthy(); expect(alertDetails.queryByTestId('alertDetailsTabbedContent')).toBeTruthy(); - expect(alertDetails.queryByTestId('alert-summary-container')).toBeTruthy(); + expect(alertDetails.queryByTestId('alert-summary-container')).toBeFalsy(); expect(alertDetails.queryByTestId('overviewTab')).toBeTruthy(); expect(alertDetails.queryByTestId('metadataTab')).toBeTruthy(); }); diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.tsx index bfba93a6e5904..e2bbfe4edda9a 100644 --- a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.tsx +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/alert_details.tsx @@ -44,7 +44,9 @@ import { observabilityFeatureId } from '../../../common'; import { paths } from '../../../common/locators/paths'; import { HeaderMenu } from '../overview/components/header_menu/header_menu'; import { AlertOverview } from '../../components/alert_overview/alert_overview'; +import { CustomThresholdRule } from '../../components/custom_threshold/components/types'; import { AlertDetailContextualInsights } from './alert_details_contextual_insights'; +import { AlertHistoryChart } from './components/alert_history'; interface AlertDetailsPathParams { alertId: string; @@ -77,8 +79,9 @@ export function AlertDetails() { const [ruleTypeModel, setRuleTypeModel] = useState(null); const CasesContext = getCasesContext(); const userCasesPermissions = canUseCases([observabilityFeatureId]); + const ruleId = alertDetail?.formatted.fields[ALERT_RULE_UUID]; const { rule } = useFetchRule({ - ruleId: alertDetail?.formatted.fields[ALERT_RULE_UUID], + ruleId, }); const [summaryFields, setSummaryFields] = useState(); const [alertStatus, setAlertStatus] = useState(); @@ -165,8 +168,8 @@ export function AlertDetails() { const overviewTab = alertDetail ? ( AlertDetailsAppSection && /* - when feature flag is enabled, show alert details page with customized overview tab, - otherwise show default overview tab + when feature flag is enabled, show alert details page with customized overview tab, + otherwise show default overview tab */ isAlertDetailsEnabledPerApp(alertDetail.formatted, config) ? ( <> @@ -175,13 +178,20 @@ export function AlertDetails() { {rule && alertDetail.formatted && ( - + <> + + + + )} ) : ( @@ -278,7 +288,7 @@ export function getScreenDescription(alertDetail: AlertData) { Use the following alert fields as background information for generating a response. Do not list them as bullet points in the response. ${Object.entries(getRelevantAlertFields(alertDetail)) .map(([key, value]) => `${key}: ${JSON.stringify(value)}`) - .join('\n')} + .join('\n')} `); } diff --git a/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/alert_history.tsx b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/alert_history.tsx new file mode 100644 index 0000000000000..dfcf01e4e4c13 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability/public/pages/alert_details/components/alert_history.tsx @@ -0,0 +1,192 @@ +/* + * 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 { ALERTING_FEATURE_ID } from '@kbn/alerting-plugin/common'; +import { + EuiPanel, + EuiFlexGroup, + EuiFlexItem, + EuiTitle, + EuiText, + EuiSpacer, + EuiLoadingSpinner, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { ALERT_INSTANCE_ID, ALERT_RULE_UUID, type AlertConsumers } from '@kbn/rule-data-utils'; +import { useAlertsHistory } from '@kbn/observability-alert-details'; +import type { Rule } from '@kbn/triggers-actions-ui-plugin/public'; +import { convertTo } from '../../../../common/utils/formatters'; +import { useFetchRuleTypes } from '../../../hooks/use_fetch_rule_types'; +import { useGetFilteredRuleTypes } from '../../../hooks/use_get_filtered_rule_types'; +import { useKibana } from '../../../utils/kibana_react'; +import { TopAlert } from '../../..'; +import { getDefaultAlertSummaryTimeRange } from '../../../utils/alert_summary_widget'; + +interface Props { + alert: TopAlert; + rule: Rule; +} + +const dateRange = { + from: 'now-30d', + to: 'now+1d', +}; + +export function AlertHistoryChart({ rule, alert }: Props) { + const { + http, + notifications, + triggersActionsUi: { getAlertSummaryWidget: AlertSummaryWidget }, + } = useKibana().services; + const instanceId = alert.fields[ALERT_INSTANCE_ID]; + const filteredRuleTypes = useGetFilteredRuleTypes(); + const { ruleTypes } = useFetchRuleTypes({ + filterByRuleTypeIds: filteredRuleTypes, + }); + const ruleType = ruleTypes?.find((type) => type.id === rule?.ruleTypeId); + const featureIds = + rule?.consumer === ALERTING_FEATURE_ID && ruleType?.producer + ? [ruleType.producer as AlertConsumers] + : rule + ? [rule.consumer as AlertConsumers] + : []; + const ruleId = alert.fields[ALERT_RULE_UUID]; + + const { + data: { avgTimeToRecoverUS, totalTriggeredAlerts }, + isLoading, + isError, + } = useAlertsHistory({ + http, + featureIds, + ruleId: rule.id, + dateRange, + instanceId, + }); + + if (isError) { + notifications?.toasts.addDanger({ + title: i18n.translate('xpack.observability.alertDetailsPage.alertHistory.error.toastTitle', { + defaultMessage: 'Alerts history chart error', + }), + text: i18n.translate( + 'xpack.observability.alertDetailsPage.alertHistory.error.toastDescription', + { + defaultMessage: `An error occurred when fetching alert history chart data`, + } + ), + }); + } + + return ( + + + + +

+ {i18n.translate('xpack.observability.alertDetailsPage.alertHistory.chartTitle', { + defaultMessage: 'Alerts history', + })} +

+
+
+ + + {i18n.translate('xpack.observability.alertDetailsPage.alertHistory.last30days', { + defaultMessage: 'Last 30 days', + })} + + +
+ + + + + + + +

+ {isLoading ? : totalTriggeredAlerts || '-'} +

+
+
+
+ + + {i18n.translate( + 'xpack.observability.alertDetailsPage.alertHistory.alertsTriggered', + { + defaultMessage: 'Alerts triggered', + } + )} + + +
+
+ + + + +

+ {isLoading ? ( + + ) : avgTimeToRecoverUS ? ( + convertTo({ + unit: 'minutes', + microseconds: avgTimeToRecoverUS, + extended: true, + }).formatted + ) : ( + '-' + )} +

+
+
+
+ + + {i18n.translate( + 'xpack.observability.alertDetailsPage.alertHistory.avgTimeToRecover', + { + defaultMessage: 'Avg time to recover', + } + )} + + +
+
+ + +
+ ); +} diff --git a/x-pack/plugins/observability_solution/observability/server/ui_settings.ts b/x-pack/plugins/observability_solution/observability/server/ui_settings.ts index 6ce519dbbc496..152d4dc00b905 100644 --- a/x-pack/plugins/observability_solution/observability/server/ui_settings.ts +++ b/x-pack/plugins/observability_solution/observability/server/ui_settings.ts @@ -45,6 +45,7 @@ import { enableInfrastructureAssetCustomDashboards, apmEnableServiceInventoryTableSearchBar, profilingFetchTopNFunctionsFromStacktraces, + enableInfrastructureContainerAssetView, } from '../common/ui_settings_keys'; const betaLabel = i18n.translate('xpack.observability.uiSettings.betaLabel', { @@ -244,6 +245,20 @@ export const uiSettings: Record = { }), schema: schema.boolean(), }, + [enableInfrastructureContainerAssetView]: { + category: [observabilityFeatureId], + name: i18n.translate('xpack.observability.enableInfrastructureContainerAssetView', { + defaultMessage: 'Container view', + }), + value: false, + description: i18n.translate( + 'xpack.observability.enableInfrastructureContainerAssetViewDescription', + { + defaultMessage: 'Enable the Container asset view in the Infrastructure app.', + } + ), + schema: schema.boolean(), + }, [enableInfrastructureProfilingIntegration]: { category: [observabilityFeatureId], name: i18n.translate('xpack.observability.enableInfrastructureProfilingIntegration', { diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.tsx index 9066c72278be7..db7f3a8f11888 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor.tsx @@ -17,6 +17,7 @@ import { import { FunctionListPopover } from '../chat/function_list_popover'; import { PromptEditorFunction } from './prompt_editor_function'; import { PromptEditorNaturalLanguage } from './prompt_editor_natural_language'; +import { useLastUsedPrompts } from '../../hooks/use_last_used_prompts'; export interface PromptEditorProps { disabled: boolean; @@ -49,6 +50,8 @@ export function PromptEditor({ const [hasFocus, setHasFocus] = useState(false); + const { lastUsedPrompts, addLastUsedPrompt } = useLastUsedPrompts(); + const initialInnerMessage = initialRole ? { role: initialRole, @@ -97,11 +100,15 @@ export function PromptEditor({ } }; - const handleSubmit = useCallback(async () => { + const handleSubmit = useCallback(() => { if (loading || !innerMessage) { return; } + if (innerMessage.content) { + addLastUsedPrompt(innerMessage.content); + } + const oldMessage = innerMessage; try { @@ -123,7 +130,7 @@ export function PromptEditor({ setInnerMessage(oldMessage); setMode(oldMessage.function_call?.name ? 'function' : 'prompt'); } - }, [innerMessage, loading, onSendTelemetry, onSubmit]); + }, [addLastUsedPrompt, innerMessage, loading, onSendTelemetry, onSubmit]); // Submit on Enter useEffect(() => { @@ -174,6 +181,7 @@ export function PromptEditor({ setHasFocus(true)} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_natural_language.tsx b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_natural_language.tsx index bba80817566f1..9c4d3a503562e 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_natural_language.tsx +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/components/prompt_editor/prompt_editor_natural_language.tsx @@ -4,8 +4,9 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { useCallback, useEffect, useRef } from 'react'; -import { EuiTextArea } from '@elastic/eui'; +import React, { KeyboardEvent, useCallback, useEffect, useRef, useState } from 'react'; +import { css } from '@emotion/css'; +import { EuiInputPopover, EuiSelectable, EuiTextArea } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { MessageRole } from '@kbn/observability-ai-assistant-plugin/public'; import type { Message } from '@kbn/observability-ai-assistant-plugin/common'; @@ -13,15 +14,32 @@ import type { Message } from '@kbn/observability-ai-assistant-plugin/common'; interface Props { disabled: boolean; prompt: string | undefined; + lastUsedPrompts: string[]; onChange: (message: Message['message']) => void; onChangeHeight: (height: number) => void; onFocus: () => void; onBlur: () => void; } +const inputPopoverClassName = css` + max-inline-size: 100%; +`; + +const textAreaClassName = css` + max-height: 200px; + width: 100%; +`; + +const selectableClassName = css` + .euiSelectableListItem__icon { + display: none; + } +`; + export function PromptEditorNaturalLanguage({ disabled, prompt, + lastUsedPrompts, onChange, onChangeHeight, onFocus, @@ -29,6 +47,8 @@ export function PromptEditorNaturalLanguage({ }: Props) { const textAreaRef = useRef(null); + const [isSelectablePopoverOpen, setSelectablePopoverOpen] = useState(false); + const handleChange = (event: React.ChangeEvent) => { handleResizeTextArea(); @@ -50,6 +70,27 @@ export function PromptEditorNaturalLanguage({ } }, [onChangeHeight]); + const handleKeydown = (e: KeyboardEvent) => { + // only trigger select when no prompt is available + if (!prompt && (e.key === 'ArrowUp' || e.key === 'ArrowDown')) { + e.preventDefault(); + setSelectablePopoverOpen(true); + } + }; + + const handleSelectOption = (_: any, __: any, selectedOption: { label: string }) => { + onChange({ + role: MessageRole.User, + content: selectedOption.label, + }); + setSelectablePopoverOpen(false); + }; + + const handleClosePopover = () => { + setSelectablePopoverOpen(false); + onFocus(); + }; + useEffect(() => { const textarea = textAreaRef.current; @@ -69,21 +110,46 @@ export function PromptEditorNaturalLanguage({ }, [handleResizeTextArea, prompt]); return ( - + + } + panelMinWidth={300} + anchorPosition="downLeft" + > + ({ label }))} + searchable + singleSelection + onChange={handleSelectOption} + > + {(list) => <>{list}} + + ); } diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_last_used_prompts.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_last_used_prompts.ts new file mode 100644 index 0000000000000..f509cbc9e910a --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_last_used_prompts.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { uniq } from 'lodash'; +import { useCallback, useMemo } from 'react'; +import { useLocalStorage } from './use_local_storage'; + +const AI_ASSISTANT_LAST_USED_PROMPT_STORAGE = 'kibana.ai-assistant.last-used-prompts'; + +export function useLastUsedPrompts() { + const [lastUsedPrompts, setPrompt] = useLocalStorage( + AI_ASSISTANT_LAST_USED_PROMPT_STORAGE, + [] + ); + + const addLastUsedPrompt = useCallback( + (prompt: string) => setPrompt(uniq([prompt, ...lastUsedPrompts]).slice(0, 5)), + [lastUsedPrompts, setPrompt] + ); + + return useMemo( + () => ({ lastUsedPrompts, addLastUsedPrompt }), + [addLastUsedPrompt, lastUsedPrompts] + ); +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_local_storage.test.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_local_storage.test.ts new file mode 100644 index 0000000000000..ab1d00392fdb9 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_local_storage.test.ts @@ -0,0 +1,77 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook, act } from '@testing-library/react-hooks'; +import { useLocalStorage } from './use_local_storage'; + +describe('useLocalStorage', () => { + const key = 'testKey'; + const defaultValue = 'defaultValue'; + + beforeEach(() => { + localStorage.clear(); + }); + + it('should return the default value when local storage is empty', () => { + const { result } = renderHook(() => useLocalStorage(key, defaultValue)); + const [item] = result.current; + + expect(item).toBe(defaultValue); + }); + + it('should return the stored value when local storage has a value', () => { + const storedValue = 'storedValue'; + localStorage.setItem(key, JSON.stringify(storedValue)); + const { result } = renderHook(() => useLocalStorage(key, defaultValue)); + const [item] = result.current; + + expect(item).toBe(storedValue); + }); + + it('should save the value to local storage', () => { + const { result } = renderHook(() => useLocalStorage(key, defaultValue)); + const [, saveToStorage] = result.current; + const newValue = 'newValue'; + + act(() => { + saveToStorage(newValue); + }); + + expect(JSON.parse(localStorage.getItem(key) || '')).toBe(newValue); + }); + + it('should remove the value from local storage when the value is undefined', () => { + const { result } = renderHook(() => useLocalStorage(key, defaultValue)); + const [, saveToStorage] = result.current; + + act(() => { + saveToStorage(undefined as unknown as string); + }); + + expect(localStorage.getItem(key)).toBe(null); + }); + + it('should listen for storage events to window, and remove the listener upon unmount', () => { + const addEventListenerSpy = jest.spyOn(window, 'addEventListener'); + const removeEventListenerSpy = jest.spyOn(window, 'removeEventListener'); + + const { unmount } = renderHook(() => useLocalStorage(key, defaultValue)); + + expect(addEventListenerSpy).toHaveBeenCalled(); + + const eventTypes = addEventListenerSpy.mock.calls; + + expect(eventTypes).toContainEqual(['storage', expect.any(Function)]); + + unmount(); + + expect(removeEventListenerSpy).toHaveBeenCalled(); + + addEventListenerSpy.mockRestore(); + removeEventListenerSpy.mockRestore(); + }); +}); diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_local_storage.ts b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_local_storage.ts new file mode 100644 index 0000000000000..ea9e13163e4b0 --- /dev/null +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/public/hooks/use_local_storage.ts @@ -0,0 +1,60 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useState, useEffect, useMemo, useCallback } from 'react'; + +export function useLocalStorage(key: string, defaultValue: T) { + // This is necessary to fix a race condition issue. + // It guarantees that the latest value will be always returned after the value is updated + const [storageUpdate, setStorageUpdate] = useState(0); + + const item = useMemo(() => { + return getFromStorage(key, defaultValue); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [key, storageUpdate, defaultValue]); + + const saveToStorage = useCallback( + (value: T) => { + if (value === undefined) { + window.localStorage.removeItem(key); + } else { + window.localStorage.setItem(key, JSON.stringify(value)); + setStorageUpdate(storageUpdate + 1); + } + }, + [key, storageUpdate] + ); + + useEffect(() => { + function onUpdate(event: StorageEvent) { + if (event.key === key) { + setStorageUpdate(storageUpdate + 1); + } + } + window.addEventListener('storage', onUpdate); + return () => { + window.removeEventListener('storage', onUpdate); + }; + }, [key, setStorageUpdate, storageUpdate]); + + return useMemo(() => [item, saveToStorage] as const, [item, saveToStorage]); +} + +function getFromStorage(keyName: string, defaultValue: T) { + const storedItem = window.localStorage.getItem(keyName); + + if (storedItem !== null) { + try { + return JSON.parse(storedItem) as T; + } catch (err) { + window.localStorage.removeItem(keyName); + // eslint-disable-next-line no-console + console.log(`Unable to decode: ${keyName}`); + } + } + return defaultValue; +} diff --git a/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-from.txt b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-from.txt index fa1226470e38e..54f6b16211fb8 100644 --- a/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-from.txt +++ b/x-pack/plugins/observability_solution/observability_ai_assistant_app/server/functions/query/esql_docs/esql-from.txt @@ -2,7 +2,7 @@ FROM Syntax ```esql -FROM index_pattern [METADATA fields] [OPTIONS options] +FROM index_pattern [METADATA fields] ``` Parameters @@ -10,9 +10,6 @@ index_pattern A list of indices, data streams or aliases. Supports wildcards and date math. fields A comma-separated list of metadata fields to retrieve. -options -A comma-separated list of index options to configure -data access. DescriptionThe ```esql FROM source command returns a table with data from a data stream, index, @@ -64,9 +61,3 @@ See using ES|QL across clusters.Use the optional METADATA directive to enable me ```esql FROM employees METADATA _id ``` - -Use the optional OPTIONS directive to specify index access options. -This directive must follow METADATA, if both are specified: -```esql -FROM employees* METADATA _index OPTIONS "ignore_unavailable"="true" -``` diff --git a/x-pack/plugins/observability_solution/slo/common/locators/paths.ts b/x-pack/plugins/observability_solution/slo/common/locators/paths.ts index 198b433e285a2..3f3d53dcb6345 100644 --- a/x-pack/plugins/observability_solution/slo/common/locators/paths.ts +++ b/x-pack/plugins/observability_solution/slo/common/locators/paths.ts @@ -6,7 +6,6 @@ */ export const SLOS_BASE_PATH = '/app/slos'; -export const SLO_PREFIX = '/slos'; export const SLOS_PATH = '/' as const; export const SLOS_WELCOME_PATH = '/welcome' as const; export const SLO_DETAIL_PATH = '/:sloId/:tabId?' as const; 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 de13ad7e4f2c2..8358d897cd7b1 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 @@ -10,7 +10,6 @@ import React, { useEffect } from 'react'; import { AlertSummaryField } from '@kbn/observability-plugin/public'; import { useKibana } from '../../../../utils/kibana_react'; import { useFetchSloDetails } from '../../../../hooks/use_fetch_slo_details'; -import { AlertsHistoryPanel } from './components/alerts_history/alerts_history_panel'; import { ErrorRatePanel } from './components/error_rate/error_rate_panel'; import { CustomAlertDetailsPanel } from './components/custom_panels/custom_panels'; import { BurnRateAlert, BurnRateRule } from './types'; @@ -69,7 +68,6 @@ export default function AlertDetailsAppSection({ - ); } diff --git a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/alerts_history/alerts_history_panel.tsx b/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/alerts_history/alerts_history_panel.tsx deleted file mode 100644 index 3b802c1588ad7..0000000000000 --- a/x-pack/plugins/observability_solution/slo/public/components/slo/burn_rate/alert_details/components/alerts_history/alerts_history_panel.tsx +++ /dev/null @@ -1,208 +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 { - EuiFlexGroup, - EuiFlexItem, - EuiIcon, - EuiLink, - EuiLoadingChart, - EuiLoadingSpinner, - EuiPanel, - EuiStat, - EuiText, - EuiTextColor, - EuiTitle, -} from '@elastic/eui'; -import { i18n } from '@kbn/i18n'; -import { FormattedMessage } from '@kbn/i18n-react'; -import { useAlertsHistory } from '@kbn/observability-alert-details'; -import rison from '@kbn/rison'; -import { ALERT_INSTANCE_ID, ALERT_RULE_PARAMETERS } from '@kbn/rule-data-utils'; -import { GetSLOResponse } from '@kbn/slo-schema'; -import moment from 'moment'; -import React from 'react'; -import { convertTo } from '@kbn/observability-plugin/public'; -import { useKibana } from '../../../../../../utils/kibana_react'; -import { WindowSchema } from '../../../../../../typings'; -import { ErrorRateChart } from '../../../../error_rate_chart'; -import { BurnRateAlert, BurnRateRule } from '../../types'; -import { getActionGroupFromReason } from '../../utils/alert'; - -interface Props { - slo?: GetSLOResponse; - alert: BurnRateAlert; - rule: BurnRateRule; - isLoading: boolean; -} - -export function AlertsHistoryPanel({ rule, slo, alert, isLoading }: Props) { - const { - services: { http }, - } = useKibana(); - const { isLoading: isAlertsHistoryLoading, data } = useAlertsHistory({ - featureIds: ['slo'], - ruleId: rule.id, - dateRange: { - from: 'now-30d', - to: 'now', - }, - http, - instanceId: alert.fields[ALERT_INSTANCE_ID], - }); - - const actionGroup = getActionGroupFromReason(alert.reason); - const actionGroupWindow = ( - (alert.fields[ALERT_RULE_PARAMETERS]?.windows ?? []) as WindowSchema[] - ).find((window: WindowSchema) => window.actionGroup === actionGroup); - const dataTimeRange = { - from: moment().subtract(30, 'day').toDate(), - to: new Date(), - }; - - function getAlertsLink() { - const kuery = `kibana.alert.rule.uuid:"${rule.id}"`; - return http.basePath.prepend(`/app/observability/alerts?_a=${rison.encode({ kuery })}`); - } - - if (isLoading) { - return ; - } - - if (!slo) { - return null; - } - - return ( - - - - - - -

- {i18n.translate( - 'xpack.slo.burnRateRule.alertDetailsAppSection.alertsHistory.title', - { defaultMessage: '{sloName} alerts history', values: { sloName: slo.name } } - )} -

-
-
- - - - - - -
- - - - - {i18n.translate( - 'xpack.slo.burnRateRule.alertDetailsAppSection.alertsHistory.subtitle', - { - defaultMessage: 'Last 30 days', - } - )} - - - -
- - - - - ) : data.totalTriggeredAlerts ? ( - data.totalTriggeredAlerts - ) : ( - '-' - ) - } - titleColor="danger" - titleSize="m" - textAlign="left" - isLoading={isLoading} - data-test-subj="alertsTriggeredStats" - reverse - description={ - - - {i18n.translate( - 'xpack.slo.burnRateRule.alertDetailsAppSection.alertsHistory.triggeredAlertsStatsTitle', - { defaultMessage: 'Alerts triggered' } - )} - - - } - /> - - - - ) : data.avgTimeToRecoverUS ? ( - convertTo({ - unit: 'minutes', - microseconds: data.avgTimeToRecoverUS, - extended: true, - }).formatted - ) : ( - '-' - ) - } - titleColor="default" - titleSize="m" - textAlign="left" - isLoading={isLoading} - data-test-subj="avgTimeToRecoverStat" - reverse - description={ - - - {i18n.translate( - 'xpack.slo.burnRateRule.alertDetailsAppSection.alertsHistory.avgTimeToRecoverStatsTitle', - { defaultMessage: 'Avg time to recover' } - )} - - - } - /> - - - - - - {isAlertsHistoryLoading ? ( - - ) : ( - a.doc_count > 0) - .map((a) => ({ - date: new Date(a.key_as_string!), - total: a.doc_count, - }))} - showErrorRateAsLine - /> - )} - - -
-
- ); -} diff --git a/x-pack/plugins/observability_solution/slo/public/context/plugin_context.tsx b/x-pack/plugins/observability_solution/slo/public/context/plugin_context.tsx index 9bdfcb2a9d0e4..6b8a36655f70d 100644 --- a/x-pack/plugins/observability_solution/slo/public/context/plugin_context.tsx +++ b/x-pack/plugins/observability_solution/slo/public/context/plugin_context.tsx @@ -14,7 +14,7 @@ import { ExperimentalFeatures } from '../../common/config'; export interface PluginContextValue { isDev?: boolean; isServerless?: boolean; - appMountParameters: AppMountParameters; + appMountParameters?: AppMountParameters; observabilityRuleTypeRegistry: ObservabilityRuleTypeRegistry; ObservabilityPageTemplate: React.ComponentType; experimentalFeatures?: ExperimentalFeatures; diff --git a/x-pack/plugins/observability_solution/slo/public/locators/slo_details.test.ts b/x-pack/plugins/observability_solution/slo/public/locators/slo_details.test.ts index 08d0c948002fc..068cf95b88cd3 100644 --- a/x-pack/plugins/observability_solution/slo/public/locators/slo_details.test.ts +++ b/x-pack/plugins/observability_solution/slo/public/locators/slo_details.test.ts @@ -13,12 +13,12 @@ describe('SloDetailsLocator', () => { it('returns correct url when empty params are provided', async () => { const location = await locator.getLocation({}); expect(location.app).toEqual('slo'); - expect(location.path).toEqual('/slos'); + expect(location.path).toEqual('/'); }); it('returns correct url when sloId is provided', async () => { const location = await locator.getLocation({ sloId: 'foo' }); - expect(location.path).toEqual('/slos/foo'); + expect(location.path).toEqual('/foo'); }); it('returns correct url when sloId and instanceId are provided', async () => { @@ -26,7 +26,7 @@ describe('SloDetailsLocator', () => { sloId: 'some-slo_id', instanceId: 'another-instance_id', }); - expect(location.path).toEqual('/slos/some-slo_id?instanceId=another-instance_id'); + expect(location.path).toEqual('/some-slo_id?instanceId=another-instance_id'); }); it("returns correct url when sloId and instanceId='*' is provided", async () => { @@ -34,6 +34,6 @@ describe('SloDetailsLocator', () => { sloId: 'some-slo_id', instanceId: '*', }); - expect(location.path).toEqual('/slos/some-slo_id'); + expect(location.path).toEqual('/some-slo_id'); }); }); diff --git a/x-pack/plugins/observability_solution/slo/public/locators/slo_details.ts b/x-pack/plugins/observability_solution/slo/public/locators/slo_details.ts index 1e9063b9c7a37..c3814a3653176 100644 --- a/x-pack/plugins/observability_solution/slo/public/locators/slo_details.ts +++ b/x-pack/plugins/observability_solution/slo/public/locators/slo_details.ts @@ -8,7 +8,6 @@ import type { SerializableRecord } from '@kbn/utility-types'; import type { LocatorDefinition } from '@kbn/share-plugin/public'; import { sloDetailsLocatorID } from '@kbn/observability-plugin/common'; -import { SLO_PREFIX } from '../../common/locators/paths'; export interface SloDetailsLocatorParams extends SerializableRecord { sloId?: string; @@ -21,7 +20,7 @@ export class SloDetailsLocatorDefinition implements LocatorDefinition { const queryParams = !!instanceId && instanceId !== '*' ? `?instanceId=${encodeURIComponent(instanceId)}` : ''; - const path = !!sloId ? `${SLO_PREFIX}/${encodeURIComponent(sloId)}${queryParams}` : SLO_PREFIX; + const path = !!sloId ? `/${encodeURIComponent(sloId)}${queryParams}` : '/'; return { app: 'slo', diff --git a/x-pack/plugins/observability_solution/slo/public/locators/slo_edit.test.ts b/x-pack/plugins/observability_solution/slo/public/locators/slo_edit.test.ts index 7d25405daaf33..5ed997bcec129 100644 --- a/x-pack/plugins/observability_solution/slo/public/locators/slo_edit.test.ts +++ b/x-pack/plugins/observability_solution/slo/public/locators/slo_edit.test.ts @@ -14,13 +14,13 @@ describe('SloEditLocator', () => { it('should return correct url when empty params are provided', async () => { const location = await locator.getLocation({}); expect(location.app).toEqual('slo'); - expect(location.path).toEqual('/slos/create?_a=()'); + expect(location.path).toEqual('/create?_a=()'); }); it('should return correct url when slo is provided', async () => { const location = await locator.getLocation(buildSlo({ id: 'foo' })); expect(location.path).toEqual( - "/slos/edit/foo?_a=(budgetingMethod:occurrences,createdAt:'2022-12-29T10:11:12.000Z',description:'some%20description%20useful',enabled:!t,groupBy:'*',groupings:(),id:foo,indicator:(params:(filter:'baz:%20foo%20and%20bar%20%3E%202',good:'http_status:%202xx',index:some-index,timestampField:custom_timestamp,total:'a%20query'),type:sli.kql.custom),instanceId:'*',meta:(),name:'super%20important%20level%20service',objective:(target:0.98),revision:1,settings:(frequency:'1m',syncDelay:'1m'),summary:(errorBudget:(consumed:0.064,initial:0.02,isEstimated:!f,remaining:0.936),sliValue:0.99872,status:HEALTHY),tags:!(k8s,production,critical),timeWindow:(duration:'30d',type:rolling),updatedAt:'2022-12-29T10:11:12.000Z',version:2)" + "/edit/foo?_a=(budgetingMethod:occurrences,createdAt:'2022-12-29T10:11:12.000Z',description:'some%20description%20useful',enabled:!t,groupBy:'*',groupings:(),id:foo,indicator:(params:(filter:'baz:%20foo%20and%20bar%20%3E%202',good:'http_status:%202xx',index:some-index,timestampField:custom_timestamp,total:'a%20query'),type:sli.kql.custom),instanceId:'*',meta:(),name:'super%20important%20level%20service',objective:(target:0.98),revision:1,settings:(frequency:'1m',syncDelay:'1m'),summary:(errorBudget:(consumed:0.064,initial:0.02,isEstimated:!f,remaining:0.936),sliValue:0.99872,status:HEALTHY),tags:!(k8s,production,critical),timeWindow:(duration:'30d',type:rolling),updatedAt:'2022-12-29T10:11:12.000Z',version:2)" ); }); }); diff --git a/x-pack/plugins/observability_solution/slo/public/locators/slo_edit.ts b/x-pack/plugins/observability_solution/slo/public/locators/slo_edit.ts index 5ea89ac66d546..120bc533e9eea 100644 --- a/x-pack/plugins/observability_solution/slo/public/locators/slo_edit.ts +++ b/x-pack/plugins/observability_solution/slo/public/locators/slo_edit.ts @@ -11,7 +11,7 @@ import type { SerializableRecord } from '@kbn/utility-types'; import type { LocatorDefinition } from '@kbn/share-plugin/public'; import { sloEditLocatorID } from '@kbn/observability-plugin/common'; import type { CreateSLOForm } from '../pages/slo_edit/types'; -import { SLO_CREATE_PATH, SLO_PREFIX } from '../../common/locators/paths'; +import { SLO_CREATE_PATH } from '../../common/locators/paths'; export type SloEditParams = RecursivePartial; @@ -29,9 +29,7 @@ export class SloEditLocatorDefinition implements LocatorDefinition { const location = await locator.getLocation({}); expect(location.app).toEqual('slo'); expect(location.path).toMatchInlineSnapshot( - `"/slos?search=(filters:!(),groupBy:ungrouped,kqlQuery:'',lastRefresh:0,page:0,perPage:25,sort:(by:status,direction:desc),view:cardView)"` + `"/?search=(filters:!(),groupBy:ungrouped,kqlQuery:'',lastRefresh:0,page:0,perPage:25,sort:(by:status,direction:desc),view:cardView)"` ); }); @@ -24,7 +24,7 @@ describe('SloListLocator', () => { }); expect(location.app).toEqual('slo'); expect(location.path).toMatchInlineSnapshot( - `"/slos?search=(filters:!(),groupBy:ungrouped,kqlQuery:'slo.name:%20%22Service%20Availability%22%20and%20slo.indicator.type%20:%20%22sli.kql.custom%22',lastRefresh:0,page:0,perPage:25,sort:(by:status,direction:desc),view:cardView)"` + `"/?search=(filters:!(),groupBy:ungrouped,kqlQuery:'slo.name:%20%22Service%20Availability%22%20and%20slo.indicator.type%20:%20%22sli.kql.custom%22',lastRefresh:0,page:0,perPage:25,sort:(by:status,direction:desc),view:cardView)"` ); }); }); diff --git a/x-pack/plugins/observability_solution/slo/public/locators/slo_list.ts b/x-pack/plugins/observability_solution/slo/public/locators/slo_list.ts index 1e4d1ee87cf8f..49c94d3c95b9d 100644 --- a/x-pack/plugins/observability_solution/slo/public/locators/slo_list.ts +++ b/x-pack/plugins/observability_solution/slo/public/locators/slo_list.ts @@ -10,7 +10,6 @@ import type { LocatorDefinition } from '@kbn/share-plugin/public'; import type { SerializableRecord } from '@kbn/utility-types'; import deepmerge from 'deepmerge'; import { sloListLocatorID } from '@kbn/observability-plugin/common'; -import { SLO_PREFIX } from '../../common/locators/paths'; import { DEFAULT_STATE, SearchState, @@ -36,7 +35,7 @@ export class SloListLocatorDefinition implements LocatorDefinition Promise; observabilityRuleTypeRegistry: ObservabilityRuleTypeRegistry; ObservabilityPageTemplate: React.ComponentType; isDev?: boolean; @@ -41,7 +39,7 @@ export const getCreateSLOFlyoutLazy = ({ isServerless?: boolean; experimentalFeatures: ExperimentalFeatures; }) => { - return async ({ + return ({ onClose, initialValues, }: { @@ -49,7 +47,6 @@ export const getCreateSLOFlyoutLazy = ({ initialValues?: RecursivePartial; }) => { const queryClient = new QueryClient(); - const appMountParameters = await getAppMountParameters(); return ( diff --git a/x-pack/plugins/observability_solution/slo/public/plugin.ts b/x-pack/plugins/observability_solution/slo/public/plugin.ts index 99acdbbc73355..99f586790cd99 100644 --- a/x-pack/plugins/observability_solution/slo/public/plugin.ts +++ b/x-pack/plugins/observability_solution/slo/public/plugin.ts @@ -14,7 +14,7 @@ import { Plugin, PluginInitializerContext, } from '@kbn/core/public'; -import { BehaviorSubject, Subject, firstValueFrom } from 'rxjs'; +import { BehaviorSubject, firstValueFrom } from 'rxjs'; import { SloPublicPluginsSetup, SloPublicPluginsStart } from './types'; import { PLUGIN_NAME, sloAppId } from '../common'; import type { SloPublicSetup, SloPublicStart } from './types'; @@ -32,7 +32,6 @@ export class SloPlugin implements Plugin { private readonly appUpdater$ = new BehaviorSubject(() => ({})); - private readonly appMountParameters$ = new Subject>(); private experimentalFeatures: ExperimentalFeatures = { ruleFormV2: { enabled: false } }; constructor(private readonly initContext: PluginInitializerContext) { @@ -57,7 +56,6 @@ export class SloPlugin const [coreStart, pluginsStart] = await coreSetup.getStartServices(); const { ruleTypeRegistry, actionTypeRegistry } = pluginsStart.triggersActionsUi; const { observabilityRuleTypeRegistry } = pluginsStart.observability; - this.appMountParameters$.next(params); return renderApp({ appMountParameters: params, @@ -166,7 +164,6 @@ export class SloPlugin observabilityRuleTypeRegistry: pluginsStart.observability.observabilityRuleTypeRegistry, ObservabilityPageTemplate: pluginsStart.observabilityShared.navigation.PageTemplate, plugins: { ...pluginsStart, ruleTypeRegistry, actionTypeRegistry }, - getAppMountParameters: () => firstValueFrom(this.appMountParameters$), isServerless: !!pluginsStart.serverless, experimentalFeatures: this.experimentalFeatures, }), diff --git a/x-pack/plugins/observability_solution/slo/tsconfig.json b/x-pack/plugins/observability_solution/slo/tsconfig.json index d16328c73a35f..d59deae17902c 100644 --- a/x-pack/plugins/observability_solution/slo/tsconfig.json +++ b/x-pack/plugins/observability_solution/slo/tsconfig.json @@ -29,7 +29,6 @@ "@kbn/kibana-utils-plugin", "@kbn/slo-schema", "@kbn/alerting-plugin", - "@kbn/observability-alert-details", "@kbn/rison", "@kbn/embeddable-plugin", "@kbn/lens-plugin", diff --git a/x-pack/plugins/remote_clusters/server/routes/api/get_route.test.ts b/x-pack/plugins/remote_clusters/server/routes/api/get_route.test.ts index e5949d8a3d528..a32d9fb4f6b3c 100644 --- a/x-pack/plugins/remote_clusters/server/routes/api/get_route.test.ts +++ b/x-pack/plugins/remote_clusters/server/routes/api/get_route.test.ts @@ -40,6 +40,7 @@ describe('GET remote clusters', () => { let remoteInfoMockFn: ScopedClusterClientMock['asCurrentUser']['cluster']['remoteInfo']; let getSettingsMockFn: ScopedClusterClientMock['asCurrentUser']['cluster']['getSettings']; + let resolveClusterMockFn: ScopedClusterClientMock['asCurrentUser']['indices']['resolveCluster']; const createMockRequest = () => httpServerMock.createKibanaRequest({ @@ -63,6 +64,7 @@ describe('GET remote clusters', () => { mockContext = xpackMocks.createRequestHandlerContext(); scopedClusterClientMock = mockContext.core.elasticsearch.client; remoteInfoMockFn = scopedClusterClientMock.asCurrentUser.cluster.remoteInfo; + resolveClusterMockFn = scopedClusterClientMock.asCurrentUser.indices.resolveCluster; getSettingsMockFn = scopedClusterClientMock.asCurrentUser.cluster.getSettings; mockRouteDependencies = createMockRouteDependencies(); @@ -87,9 +89,15 @@ describe('GET remote clusters', () => { }, transient: {}, }); - remoteInfoMockFn.mockResponseOnce({ + resolveClusterMockFn.mockResponseOnce({ test: { connected: true, + skip_unavailable: false, + }, + }); + remoteInfoMockFn.mockResponseOnce({ + test: { + connected: false, mode: 'sniff', seeds: ['127.0.0.1:9300'], num_nodes_connected: 1, diff --git a/x-pack/plugins/remote_clusters/server/routes/api/get_route.ts b/x-pack/plugins/remote_clusters/server/routes/api/get_route.ts index 8923e9be7d9fd..e4541414acfe2 100644 --- a/x-pack/plugins/remote_clusters/server/routes/api/get_route.ts +++ b/x-pack/plugins/remote_clusters/server/routes/api/get_route.ts @@ -7,6 +7,7 @@ import { get } from 'lodash'; +import type { IndicesResolveClusterResponse } from '@elastic/elasticsearch/lib/api/types'; import { RequestHandler } from '@kbn/core/server'; import { deserializeCluster } from '../../../common/lib'; import { API_BASE_PATH } from '../../../common/constants'; @@ -34,6 +35,16 @@ export const register = (deps: RouteDependencies): void => { const clustersByName = await clusterClient.asCurrentUser.cluster.remoteInfo(); const clusterNames = (clustersByName && Object.keys(clustersByName)) || []; + // Retrieve the cluster information for all the configured remote clusters. + // _none is never a valid index/alias/data-stream name so that way we can avoid + // using * which could be computationally expensive. + let clustersStatus: IndicesResolveClusterResponse = {}; + if (clusterNames.length > 0) { + clustersStatus = await clusterClient.asCurrentUser.indices.resolveCluster({ + name: clusterNames.map((cluster) => `${cluster}:_none`), + }); + } + const body = clusterNames.map((clusterName: string): any => { const cluster = clustersByName[clusterName]; const isTransient = transientClusterNames.includes(clusterName); @@ -59,6 +70,9 @@ export const register = (deps: RouteDependencies): void => { config.isCloudEnabled ), isConfiguredByNode, + // We prioritize the cluster status from the resolve cluster api, and fallback to + // the cluster connected status in case its not present. + isConnected: clustersStatus[clusterName]?.connected || cluster.connected, }; }); diff --git a/x-pack/plugins/security/public/management/role_combo_box/role_combo_box.test.tsx b/x-pack/plugins/security/public/management/role_combo_box/role_combo_box.test.tsx index 4003ce6233bda..f841fbca7d55a 100644 --- a/x-pack/plugins/security/public/management/role_combo_box/role_combo_box.test.tsx +++ b/x-pack/plugins/security/public/management/role_combo_box/role_combo_box.test.tsx @@ -42,6 +42,7 @@ describe('RoleComboBox', () => { }, { name: 'deprecated_role', + description: 'Deprecated role description', elasticsearch: { cluster: [], indices: [], run_as: [] }, kibana: [], metadata: { _reserved: true, _deprecated: true }, @@ -72,6 +73,7 @@ describe('RoleComboBox', () => { "label": "custom_role", "value": Object { "deprecatedReason": undefined, + "description": undefined, "isAdmin": false, "isDeprecated": false, "isReserved": false, @@ -89,6 +91,7 @@ describe('RoleComboBox', () => { "label": "reserved_role", "value": Object { "deprecatedReason": undefined, + "description": undefined, "isAdmin": false, "isDeprecated": false, "isReserved": true, @@ -106,6 +109,7 @@ describe('RoleComboBox', () => { "label": "some_admin", "value": Object { "deprecatedReason": undefined, + "description": undefined, "isAdmin": true, "isDeprecated": false, "isReserved": true, @@ -123,6 +127,7 @@ describe('RoleComboBox', () => { "label": "some_system", "value": Object { "deprecatedReason": undefined, + "description": undefined, "isAdmin": false, "isDeprecated": false, "isReserved": true, @@ -140,6 +145,7 @@ describe('RoleComboBox', () => { "label": "deprecated_role", "value": Object { "deprecatedReason": undefined, + "description": "Deprecated role description", "isAdmin": false, "isDeprecated": true, "isReserved": true, diff --git a/x-pack/plugins/security/public/management/role_combo_box/role_combo_box.tsx b/x-pack/plugins/security/public/management/role_combo_box/role_combo_box.tsx index 5e329b32c353d..c1ce607d82acf 100644 --- a/x-pack/plugins/security/public/management/role_combo_box/role_combo_box.tsx +++ b/x-pack/plugins/security/public/management/role_combo_box/role_combo_box.tsx @@ -6,7 +6,14 @@ */ import type { EuiComboBoxOptionOption, EuiComboBoxProps } from '@elastic/eui'; -import { EuiBadge, EuiComboBox, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; +import { + EuiBadge, + EuiComboBox, + EuiFlexGroup, + EuiFlexItem, + EuiText, + EuiToolTip, +} from '@elastic/eui'; import React from 'react'; import { i18n } from '@kbn/i18n'; @@ -34,6 +41,7 @@ type Option = EuiComboBoxOptionOption<{ isSystem: boolean; isAdmin: boolean; deprecatedReason?: string; + description?: string; }>; export const RoleComboBox = (props: Props) => { @@ -57,6 +65,7 @@ export const RoleComboBox = (props: Props) => { isSystem, isAdmin, deprecatedReason: roleDefinition?.metadata?._deprecated_reason, + description: roleDefinition?.description, }, }; }; @@ -134,7 +143,15 @@ export const RoleComboBox = (props: Props) => { function renderOption(option: Option) { return ( - {option.label} + + {option.value?.description ? ( + + {option.label} + + ) : ( + {option.label} + )} + {option.value?.isDeprecated ? ( diff --git a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.test.tsx index 90246ccd6afe9..93d8fec9e15a0 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.test.tsx @@ -541,6 +541,69 @@ describe('', () => { expectSaveFormButtons(wrapper); }); + it('can render a user defined role with description', async () => { + const wrapper = mountWithIntl( + + + + ); + + await waitForRender(wrapper); + + expect(wrapper.find('input[data-test-subj="roleFormDescriptionInput"]').prop('value')).toBe( + 'my custom role description' + ); + expect( + wrapper.find('input[data-test-subj="roleFormDescriptionInput"]').prop('disabled') + ).toBe(undefined); + expectSaveFormButtons(wrapper); + }); + + it('can render a reserved role with description', async () => { + const wrapper = mountWithIntl( + + + + ); + + await waitForRender(wrapper); + + expect(wrapper.find('[data-test-subj="roleFormDescriptionTooltip"]')).toHaveLength(1); + + expect(wrapper.find('input[data-test-subj="roleFormDescriptionInput"]').prop('value')).toBe( + 'my reserved role description' + ); + expect( + wrapper.find('input[data-test-subj="roleFormDescriptionInput"]').prop('disabled') + ).toBe(true); + }); + it('can render when creating a new role', async () => { const wrapper = mountWithIntl( diff --git a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx index 56fb561443e82..697b85feb9edb 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/edit_role_page.tsx @@ -18,6 +18,7 @@ import { EuiSpacer, EuiText, EuiTitle, + EuiToolTip, } from '@elastic/eui'; import type { ChangeEvent, FocusEvent, FunctionComponent, HTMLProps } from 'react'; import React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'; @@ -211,6 +212,7 @@ function useRole( ? rolesAPIClient.getRole(roleName) : Promise.resolve({ name: '', + description: '', elasticsearch: { cluster: [], indices: [], run_as: [], remote_cluster: [] }, kibana: [], _unrecognized_applications: [], @@ -452,45 +454,82 @@ export const EditRolePage: FunctionComponent = ({ return null; }; - const getRoleName = () => { + const getRoleNameAndDescription = () => { return ( - - } - helpText={ - !isEditingExistingRole ? ( - - ) : !isRoleReserved ? ( - + + + } + helpText={ + !isEditingExistingRole ? ( + + ) : !isRoleReserved ? ( + + ) : undefined + } + {...validator.validateRoleName(role)} + {...(creatingRoleAlreadyExists + ? { error: 'A role with this name already exists.', isInvalid: true } + : {})} + > + - ) : undefined - } - {...validator.validateRoleName(role)} - {...(creatingRoleAlreadyExists - ? { error: 'A role with this name already exists.', isInvalid: true } - : {})} - > - - + + + + + } + > + {isRoleReserved || isRoleReadOnly ? ( + + + + ) : ( + + )} + + + ); }; @@ -510,6 +549,12 @@ export const EditRolePage: FunctionComponent = ({ } }; + const onDescriptionChange = (e: ChangeEvent) => + setRole({ + ...role, + description: e.target.value.trim().length ? e.target.value : undefined, + }); + const getElasticsearchPrivileges = () => { return (
@@ -787,7 +832,7 @@ export const EditRolePage: FunctionComponent = ({ )} - {getRoleName()} + {getRoleNameAndDescription()} {getElasticsearchPrivileges()} {getKibanaPrivileges()} diff --git a/x-pack/plugins/security/public/management/roles/edit_role/validate_role.ts b/x-pack/plugins/security/public/management/roles/edit_role/validate_role.ts index bf85f80df1fc1..a425578ed98e5 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/validate_role.ts +++ b/x-pack/plugins/security/public/management/roles/edit_role/validate_role.ts @@ -85,7 +85,6 @@ export class RoleValidator { } return valid(); } - public validateRemoteClusterPrivileges(role: Role): RoleValidationResult { if (!this.shouldValidate) { return valid(); diff --git a/x-pack/plugins/security/public/management/roles/roles_grid/roles_grid_page.test.tsx b/x-pack/plugins/security/public/management/roles/roles_grid/roles_grid_page.test.tsx index ed6f28ea8321f..6b666cfd378f4 100644 --- a/x-pack/plugins/security/public/management/roles/roles_grid/roles_grid_page.test.tsx +++ b/x-pack/plugins/security/public/management/roles/roles_grid/roles_grid_page.test.tsx @@ -56,6 +56,12 @@ describe('', () => { elasticsearch: { cluster: [], indices: [], run_as: [] }, kibana: [{ base: [], spaces: [], feature: {} }], }, + { + name: 'test-role-with-description', + description: 'role-description', + elasticsearch: { cluster: [], indices: [], run_as: [] }, + kibana: [{ base: [], spaces: [], feature: {} }], + }, { name: 'reserved-role', elasticsearch: { cluster: [], indices: [], run_as: [] }, @@ -162,6 +168,10 @@ describe('', () => { expect(wrapper.find('a[data-test-subj="edit-role-action-disabled-role"]')).toHaveLength(1); expect(wrapper.find('a[data-test-subj="clone-role-action-disabled-role"]')).toHaveLength(1); + + expect(findTestSubject(wrapper, 'roleRowDescription-test-role-with-description')).toHaveLength( + 1 + ); }); it('hides reserved roles when instructed to', async () => { @@ -201,6 +211,12 @@ describe('', () => { elasticsearch: { cluster: [], indices: [], run_as: [] }, kibana: [{ base: [], spaces: [], feature: {} }], }, + { + name: 'test-role-with-description', + description: 'role-description', + elasticsearch: { cluster: [], indices: [], run_as: [] }, + kibana: [{ base: [], spaces: [], feature: {} }], + }, ]); findTestSubject(wrapper, 'showReservedRolesSwitch').simulate('click'); @@ -222,6 +238,12 @@ describe('', () => { elasticsearch: { cluster: [], indices: [], run_as: [] }, kibana: [{ base: [], spaces: [], feature: {} }], }, + { + name: 'test-role-with-description', + description: 'role-description', + elasticsearch: { cluster: [], indices: [], run_as: [] }, + kibana: [{ base: [], spaces: [], feature: {} }], + }, ]); }); diff --git a/x-pack/plugins/security/public/management/roles/roles_grid/roles_grid_page.tsx b/x-pack/plugins/security/public/management/roles/roles_grid/roles_grid_page.tsx index a21d0a1e99912..bb87cc61b0f84 100644 --- a/x-pack/plugins/security/public/management/roles/roles_grid/roles_grid_page.tsx +++ b/x-pack/plugins/security/public/management/roles/roles_grid/roles_grid_page.tsx @@ -17,6 +17,7 @@ import { EuiSpacer, EuiSwitch, EuiText, + EuiToolTip, } from '@elastic/eui'; import _ from 'lodash'; import React, { Component } from 'react'; @@ -183,7 +184,6 @@ export class RolesGridPage extends Component { { ); }, }, + { + field: 'description', + name: i18n.translate('xpack.security.management.roles.descriptionColumnName', { + defaultMessage: 'Role Description', + }), + sortable: true, + truncateText: { lines: 3 }, + render: (description: string, record: Role) => { + return ( + + + {description} + + + ); + }, + }, ]; if (this.props.buildFlavor !== 'serverless') { config.push({ diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.gen.ts index 141991327fb2d..99badae28dc40 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.gen.ts @@ -13,7 +13,7 @@ import { z } from 'zod'; * * info: * title: Asset Criticality Common Schema - * version: 1.0.0 + * version: 1 */ export type IdField = z.infer; @@ -33,13 +33,23 @@ export const AssetCriticalityRecordIdParts = z.object({ id_field: IdField, }); +/** + * The criticality level of the asset. + */ +export type AssetCriticalityLevel = z.infer; +export const AssetCriticalityLevel = z.enum([ + 'low_impact', + 'medium_impact', + 'high_impact', + 'extreme_impact', +]); +export type AssetCriticalityLevelEnum = typeof AssetCriticalityLevel.enum; +export const AssetCriticalityLevelEnum = AssetCriticalityLevel.enum; + export type CreateAssetCriticalityRecord = z.infer; export const CreateAssetCriticalityRecord = AssetCriticalityRecordIdParts.merge( z.object({ - /** - * The criticality level of the asset. - */ - criticality_level: z.enum(['low_impact', 'medium_impact', 'high_impact', 'extreme_impact']), + criticality_level: AssetCriticalityLevel, /** * If 'wait_for' the request will wait for the index refresh. */ diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.schema.yaml index 3d3e82524109d..294cba2dd89ea 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/common.schema.yaml @@ -2,8 +2,8 @@ openapi: 3.0.0 info: title: Asset Criticality Common Schema description: Common schema for asset criticality - version: 1.0.0 -paths: { } + version: '1' +paths: {} components: parameters: id_value: @@ -41,19 +41,26 @@ components: required: - id_value - id_field + AssetCriticalityLevel: + type: string + enum: + - low_impact + - medium_impact + - high_impact + - extreme_impact + description: The criticality level of the asset. + CreateAssetCriticalityRecord: allOf: - $ref: '#/components/schemas/AssetCriticalityRecordIdParts' - type: object properties: criticality_level: - type: string - enum: [low_impact, medium_impact, high_impact, extreme_impact] - description: The criticality level of the asset. + $ref: '#/components/schemas/AssetCriticalityLevel' refresh: - type: string - enum: [wait_for] - description: If 'wait_for' the request will wait for the index refresh. + type: string + enum: [wait_for] + description: If 'wait_for' the request will wait for the index refresh. required: - criticality_level DeleteAssetCriticalityRecord: @@ -62,18 +69,18 @@ components: - type: object properties: refresh: - type: string - enum: [wait_for] - description: If 'wait_for' the request will wait for the index refresh. + type: string + enum: [wait_for] + description: If 'wait_for' the request will wait for the index refresh. AssetCriticalityRecord: allOf: - $ref: '#/components/schemas/CreateAssetCriticalityRecord' - type: object properties: - "@timestamp": + '@timestamp': type: string format: 'date-time' example: '2017-07-21T17:32:28Z' description: The time the record was created or updated. required: - - "@timestamp" + - '@timestamp' diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/create_asset_criticality.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/create_asset_criticality.schema.yaml index cc8c980809f9b..46a0d3132dbe8 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/create_asset_criticality.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/create_asset_criticality.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - version: 1.0.0 + version: '1' title: Asset Criticality Create Record Schema servers: - url: 'http://{kibana_host}:{port}' diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.schema.yaml index cada6a62fcaac..3c00d590bda9a 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/delete_asset_criticality.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - version: 1.0.0 + version: '1' title: Asset Criticality Delete Record Schema servers: - url: 'http://{kibana_host}:{port}' diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality.schema.yaml index 777666daccb2f..1bec2054a65d5 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - version: 1.0.0 + version: '1' title: Asset Criticality Get Record Schema servers: - url: 'http://{kibana_host}:{port}' diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_privileges.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_privileges.gen.ts new file mode 100644 index 0000000000000..851fafd4330b2 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_privileges.gen.ts @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from 'zod'; + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Get Asset Criticality Privileges Schema + * version: 1 + */ + +export type EntityAnalyticsPrivileges = z.infer; +export const EntityAnalyticsPrivileges = z.object({ + has_all_required: z.boolean(), + has_read_permissions: z.boolean().optional(), + has_write_permissions: z.boolean().optional(), + privileges: z.object({ + elasticsearch: z.object({ + cluster: z + .object({ + manage_index_templates: z.boolean().optional(), + manage_transform: z.boolean().optional(), + }) + .optional(), + index: z + .object({}) + .catchall( + z.object({ + read: z.boolean().optional(), + write: z.boolean().optional(), + }) + ) + .optional(), + }), + }), +}); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_privileges.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_privileges.schema.yaml index 6f1734262c667..bd6b2a300ccca 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_privileges.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_privileges.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.0 info: title: Get Asset Criticality Privileges Schema - version: 1.0.0 + version: '1' servers: - url: 'http://{kibana_host}:{port}' variables: @@ -20,11 +20,49 @@ paths: content: application/json: schema: - $ref: '../common/common.schema.yaml#/components/schemas/EntityAnalyticsPrivileges' + $ref: '#/components/schemas/EntityAnalyticsPrivileges' example: elasticsearch: index: - ".asset-criticality.asset-criticality-*": + '.asset-criticality.asset-criticality-*': read: true write: false has_all_required: false +components: + schemas: + EntityAnalyticsPrivileges: + type: object + properties: + has_all_required: + type: boolean + has_read_permissions: + type: boolean + has_write_permissions: + type: boolean + privileges: + type: object + properties: + elasticsearch: + type: object + properties: + cluster: + type: object + properties: + manage_index_templates: + type: boolean + manage_transform: + type: boolean + index: + type: object + additionalProperties: + type: object + properties: + read: + type: boolean + write: + type: boolean + required: + - elasticsearch + required: + - has_all_required + - privileges diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_status.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_status.gen.ts index fdace6d552b6a..5d7ce2c1424b7 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_status.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_status.gen.ts @@ -13,7 +13,7 @@ import { z } from 'zod'; * * info: * title: Asset Criticality Status Schema - * version: 1.0.0 + * version: 1 */ export type AssetCriticalityStatusResponse = z.infer; diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_status.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_status.schema.yaml index a62450cbcff4d..312368ea3e4f1 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_status.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/get_asset_criticality_status.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - version: 1.0.0 + version: '1' title: Asset Criticality Status Schema servers: - url: 'http://{kibana_host}:{port}' diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/index.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/index.ts index 2bfe5dc73938f..cc79a94a41fcb 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/index.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/index.ts @@ -8,3 +8,4 @@ export * from './common.gen'; export * from './get_asset_criticality_status.gen'; export * from './upload_asset_criticality_csv.gen'; +export * from './get_asset_criticality_privileges.gen'; diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/upload_asset_criticality_csv.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/upload_asset_criticality_csv.gen.ts index 67bd49bf7b64a..59d50d8a056c0 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/upload_asset_criticality_csv.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/upload_asset_criticality_csv.gen.ts @@ -13,7 +13,7 @@ import { z } from 'zod'; * * info: * title: Asset Criticality Create Record Schema - * version: 1.0.0 + * version: 1 */ export type ErrorItem = z.infer; diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/upload_asset_criticality_csv.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/upload_asset_criticality_csv.schema.yaml index 55689eef3938e..fcaaa8a36b200 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/upload_asset_criticality_csv.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/asset_criticality/upload_asset_criticality_csv.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - version: 1.0.0 + version: '1' title: Asset Criticality Create Record Schema servers: - url: 'http://{kibana_host}:{port}' diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/common/after_keys.schema.test.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/common/after_keys.schema.test.ts new file mode 100644 index 0000000000000..537d28ed6668d --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/common/after_keys.schema.test.ts @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { AfterKeys } from '.'; +import type { SafeParseSuccess } from 'zod'; + +describe('after_keys schema', () => { + it('allows an empty object', () => { + const payload = {}; + const decoded = AfterKeys.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual(payload); + }); + + it('allows a valid host key', () => { + const payload = { host: { 'host.name': 'hello' } }; + const decoded = AfterKeys.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual(payload); + }); + + it('allows a valid user key', () => { + const payload = { user: { 'user.name': 'hello' } }; + const decoded = AfterKeys.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual(payload); + }); + + it('allows both valid host and user keys', () => { + const payload = { user: { 'user.name': 'hello' }, host: { 'host.name': 'hello' } }; + const decoded = AfterKeys.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual(payload); + }); + + it('removes an unknown identifier key if used', () => { + const payload = { bad: 'key' }; + + const decoded = AfterKeys.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual({}); + }); +}); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.gen.ts index 2c58f0461967b..b037534248042 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.gen.ts @@ -13,39 +13,18 @@ import { z } from 'zod'; * * info: * title: Entity Analytics Common Schema - * version: 1.0.0 + * version: 1 */ -export type EntityAnalyticsPrivileges = z.infer; -export const EntityAnalyticsPrivileges = z.object({ - has_all_required: z.boolean(), - has_read_permissions: z.boolean().optional(), - has_write_permissions: z.boolean().optional(), - privileges: z.object({ - elasticsearch: z.object({ - cluster: z - .object({ - manage_index_templates: z.boolean().optional(), - manage_transform: z.boolean().optional(), - }) - .optional(), - index: z - .object({}) - .catchall( - z.object({ - read: z.boolean().optional(), - write: z.boolean().optional(), - }) - ) - .optional(), - }), - }), -}); +import { AssetCriticalityLevel } from '../asset_criticality/common.gen'; + +export type EntityAfterKey = z.infer; +export const EntityAfterKey = z.object({}).catchall(z.string()); export type AfterKeys = z.infer; export const AfterKeys = z.object({ - host: z.object({}).catchall(z.string()).optional(), - user: z.object({}).catchall(z.string()).optional(), + host: EntityAfterKey.optional(), + user: EntityAfterKey.optional(), }); /** @@ -58,7 +37,7 @@ export const DataViewId = z.string(); * An elasticsearch DSL filter object. Used to filter the risk inputs involved, which implicitly filters the risk scores themselves. */ export type Filter = z.infer; -export const Filter = z.object({}); +export const Filter = z.object({}).catchall(z.unknown()); /** * Specifies how many scores will be involved in a given calculation. Note that this value is per `identifier_type`, i.e. a value of 10 will calculate 10 host scores and 10 user scores, if available. To avoid missed data, keep this value consistent while paginating through scores. @@ -91,19 +70,19 @@ export const RiskScoreInput = z.object({ /** * The unique identifier (`_id`) of the original source document */ - id: z.string().optional(), + id: z.string(), /** * The unique index (`_index`) of the original source document */ - index: z.string().optional(), + index: z.string(), /** * The risk category of the risk input document. */ - category: z.string().optional(), + category: z.string(), /** * A human-readable description of the risk input document. */ - description: z.string().optional(), + description: z.string(), /** * The weighted risk score of the risk input document. */ @@ -112,10 +91,19 @@ export const RiskScoreInput = z.object({ * The @timestamp of the risk input document. */ timestamp: z.string().optional(), + contribution_score: z.number().optional(), }); -export type RiskScore = z.infer; -export const RiskScore = z.object({ +export type RiskScoreCategories = z.infer; +export const RiskScoreCategories = z.literal('category_1'); + +export type EntityRiskLevels = z.infer; +export const EntityRiskLevels = z.enum(['Unknown', 'Low', 'Moderate', 'High', 'Critical']); +export type EntityRiskLevelsEnum = typeof EntityRiskLevels.enum; +export const EntityRiskLevelsEnum = EntityRiskLevels.enum; + +export type EntityRiskScoreRecord = z.infer; +export const EntityRiskScoreRecord = z.object({ /** * The time at which the risk score was calculated. */ @@ -131,7 +119,7 @@ export const RiskScore = z.object({ /** * Lexical description of the entity's risk. */ - calculated_level: z.string(), + calculated_level: EntityRiskLevels, /** * The raw numeric value of the given entity's risk score. */ @@ -152,18 +140,64 @@ export const RiskScore = z.object({ * A list of the highest-risk documents contributing to this risk score. Useful for investigative purposes. */ inputs: z.array(RiskScoreInput), + category_2_score: z.number().optional(), + category_2_count: z.number().optional(), + notes: z.array(z.string()), + criticality_modifier: z.number().optional(), + criticality_level: AssetCriticalityLevel.optional(), +}); + +export type RiskScoreEntityIdentifierWeights = z.infer; +export const RiskScoreEntityIdentifierWeights = z.number().min(0).max(1); + +export type RiskScoreWeightGlobalShared = z.infer; +export const RiskScoreWeightGlobalShared = z.object({ + type: z.literal('global_identifier'), }); +export type RiskScoreWeightGlobal = z.infer; +export const RiskScoreWeightGlobal = z.union([ + RiskScoreWeightGlobalShared.merge( + z.object({ + host: RiskScoreEntityIdentifierWeights, + user: RiskScoreEntityIdentifierWeights.optional(), + }) + ), + RiskScoreWeightGlobalShared.merge( + z.object({ + host: RiskScoreEntityIdentifierWeights.optional(), + user: RiskScoreEntityIdentifierWeights, + }) + ), +]); + +export type RiskScoreWeightCategoryShared = z.infer; +export const RiskScoreWeightCategoryShared = z.object({ + type: z.literal('risk_category'), + value: RiskScoreCategories, +}); + +export type RiskScoreWeightCategory = z.infer; +export const RiskScoreWeightCategory = z.union([ + RiskScoreWeightCategoryShared.merge( + z.object({ + host: RiskScoreEntityIdentifierWeights, + user: RiskScoreEntityIdentifierWeights.optional(), + }) + ), + RiskScoreWeightCategoryShared.merge( + z.object({ + host: RiskScoreEntityIdentifierWeights.optional(), + user: RiskScoreEntityIdentifierWeights, + }) + ), +]); + /** * Configuration used to tune risk scoring. Weights can be used to change the score contribution of risk inputs for hosts and users at both a global level and also for Risk Input categories (e.g. 'category_1'). */ export type RiskScoreWeight = z.infer; -export const RiskScoreWeight = z.object({ - type: z.string(), - value: z.string().optional(), - host: z.number().min(0).max(1).optional(), - user: z.number().min(0).max(1).optional(), -}); +export const RiskScoreWeight = z.union([RiskScoreWeightGlobal, RiskScoreWeightCategory]); /** * A list of weights to be applied to the scoring calculation. @@ -171,9 +205,11 @@ export const RiskScoreWeight = z.object({ export type RiskScoreWeights = z.infer; export const RiskScoreWeights = z.array(RiskScoreWeight); -export type RiskEngineInitStep = z.infer; -export const RiskEngineInitStep = z.object({ - type: z.string(), - success: z.boolean(), - error: z.string().optional(), +/** + * Task manager is unavailable + */ +export type TaskManagerUnavailableResponse = z.infer; +export const TaskManagerUnavailableResponse = z.object({ + status_code: z.number().int().min(400), + message: z.string(), }); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.schema.yaml index 9285503c322f0..7b6634876d8a6 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/common/common.schema.yaml @@ -2,57 +2,22 @@ openapi: 3.0.0 info: title: Entity Analytics Common Schema description: Common schema for Entity Analytics - version: 1.0.0 + version: '1' paths: {} components: schemas: - EntityAnalyticsPrivileges: + EntityAfterKey: type: object - properties: - has_all_required: - type: boolean - has_read_permissions: - type: boolean - has_write_permissions: - type: boolean - privileges: - type: object - properties: - elasticsearch: - type: object - properties: - cluster: - type: object - properties: - manage_index_templates: - type: boolean - manage_transform: - type: boolean - index: - type: object - additionalProperties: - type: object - properties: - read: - type: boolean - write: - type: boolean - required: - - elasticsearch - required: - - has_all_required - - privileges + additionalProperties: + type: string + AfterKeys: type: object properties: host: - type: object - additionalProperties: - type: string + $ref: '#/components/schemas/EntityAfterKey' user: - type: object - additionalProperties: - type: string + $ref: '#/components/schemas/EntityAfterKey' example: host: 'host.name': 'example.host' @@ -67,6 +32,7 @@ components: Filter: description: An elasticsearch DSL filter object. Used to filter the risk inputs involved, which implicitly filters the risk scores themselves. type: object + additionalProperties: true PageSize: description: Specifies how many scores will be involved in a given calculation. Note that this value is per `identifier_type`, i.e. a value of 10 will calculate 10 host scores and 10 user scores, if available. To avoid missed data, keep this value consistent while paginating through scores. @@ -98,6 +64,11 @@ components: RiskScoreInput: description: A generic representation of a document contributing to a Risk Score. type: object + required: + - id + - index + - description + - category properties: id: type: string @@ -125,8 +96,25 @@ components: type: string example: '2017-07-21T17:32:28Z' description: The @timestamp of the risk input document. + contribution_score: + type: number + format: double + + RiskScoreCategories: + type: string + enum: + - category_1 + + EntityRiskLevels: + type: string + enum: + - 'Unknown' + - 'Low' + - 'Moderate' + - 'High' + - 'Critical' - RiskScore: + EntityRiskScoreRecord: type: object required: - '@timestamp' @@ -138,6 +126,7 @@ components: - category_1_score - category_1_count - inputs + - notes properties: '@timestamp': type: string @@ -153,7 +142,7 @@ components: example: 'example.host' description: The identifier value defining this risk score. Coupled with `id_field`, uniquely identifies the entity being scored. calculated_level: - type: string + $ref: '#/components/schemas/EntityRiskLevels' example: 'Critical' description: Lexical description of the entity's risk. calculated_score: @@ -179,27 +168,106 @@ components: description: A list of the highest-risk documents contributing to this risk score. Useful for investigative purposes. items: $ref: '#/components/schemas/RiskScoreInput' + category_2_score: + type: number + format: double + category_2_count: + type: number + format: integer + notes: + type: array + items: + type: string + criticality_modifier: + type: number + format: double + criticality_level: + $ref: '../asset_criticality/common.schema.yaml#/components/schemas/AssetCriticalityLevel' - RiskScoreWeight: - description: "Configuration used to tune risk scoring. Weights can be used to change the score contribution of risk inputs for hosts and users at both a global level and also for Risk Input categories (e.g. 'category_1')." + RiskScoreEntityIdentifierWeights: + type: number + format: double + minimum: 0 + maximum: 1 + + RiskScoreWeightGlobalShared: + x-inline: true type: object required: - type properties: type: type: string - value: + enum: + - global_identifier + + RiskScoreWeightGlobal: + oneOf: + - allOf: + - $ref: '#/components/schemas/RiskScoreWeightGlobalShared' + - type: object + required: + - host + properties: + host: + $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' + user: + $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' + + - allOf: + - $ref: '#/components/schemas/RiskScoreWeightGlobalShared' + - type: object + required: + - user + properties: + host: + $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' + user: + $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' + + RiskScoreWeightCategoryShared: + x-inline: true + type: object + required: + - type + - value + properties: + type: type: string - host: - type: number - format: double - minimum: 0 - maximum: 1 - user: - type: number - format: double - minimum: 0 - maximum: 1 + enum: + - risk_category + value: + $ref: '#/components/schemas/RiskScoreCategories' + + RiskScoreWeightCategory: + oneOf: + - allOf: + - $ref: '#/components/schemas/RiskScoreWeightCategoryShared' + - type: object + required: + - host + properties: + host: + $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' + user: + $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' + + - allOf: + - $ref: '#/components/schemas/RiskScoreWeightCategoryShared' + - type: object + required: + - user + properties: + host: + $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' + user: + $ref: '#/components/schemas/RiskScoreEntityIdentifierWeights' + + RiskScoreWeight: + description: "Configuration used to tune risk scoring. Weights can be used to change the score contribution of risk inputs for hosts and users at both a global level and also for Risk Input categories (e.g. 'category_1')." + oneOf: + - $ref: '#/components/schemas/RiskScoreWeightGlobal' + - $ref: '#/components/schemas/RiskScoreWeightCategory' example: type: 'risk_category' value: 'category_1' @@ -220,15 +288,15 @@ components: host: 0.5 user: 0.1 - RiskEngineInitStep: + TaskManagerUnavailableResponse: + description: Task manager is unavailable type: object required: - - type - - success + - status_code + - message properties: - type: - type: string - success: - type: boolean - error: + status_code: + type: integer + minimum: 400 + message: type: string diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/common/risk_weights.schema.test.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/common/risk_weights.schema.test.ts new file mode 100644 index 0000000000000..59b0859300f88 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/common/risk_weights.schema.test.ts @@ -0,0 +1,216 @@ +/* + * 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 { RiskScoreWeight } from '.'; +import type { SafeParseError, SafeParseSuccess } from 'zod'; +import { stringifyZodError } from '@kbn/zod-helpers'; +import { RiskCategories, RiskWeightTypes } from '../../../entity_analytics/risk_engine'; + +describe('risk weight schema', () => { + let type: string; + + describe('allowed types', () => { + it('allows the global weight type', () => { + const payload = { + type: RiskWeightTypes.global, + host: 0.1, + }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual(payload); + }); + + it('allows the risk category weight type', () => { + const payload = { + type: RiskWeightTypes.global, + host: 0.1, + }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual(payload); + }); + + it('rejects an unknown weight type', () => { + const payload = { + type: 'unknown', + host: 0.1, + }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseError; + + expect(decoded.success).toBeFalsy(); + expect(decoded.error.errors.length).toBeGreaterThan(0); + }); + }); + + describe('conditional fields', () => { + describe('global weights', () => { + beforeEach(() => { + type = RiskWeightTypes.global; + }); + + it('rejects if neither host nor user weight are specified', () => { + const payload = { type }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseError; + + expect(decoded.success).toBeFalsy(); + expect(stringifyZodError(decoded.error)).toEqual( + 'host: Required, user: Required, type: Invalid literal value, expected "risk_category", value: Invalid literal value, expected "category_1", host: Required, and 3 more' + ); + }); + + it('allows a single host weight', () => { + const payload = { type, host: 0.1 }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual(payload); + }); + + it('allows a single user weight', () => { + const payload = { type, user: 0.1 }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual(payload); + }); + + it('allows both a host and user weight', () => { + const payload = { type, host: 0.1, user: 0.5 }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual({ type, host: 0.1, user: 0.5 }); + }); + + it('rejects a weight outside of 0-1', () => { + const payload = { type, user: 55 }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseError; + + expect(decoded.success).toBeFalsy(); + expect(stringifyZodError(decoded.error)).toContain( + `user: Number must be less than or equal to 1` + ); + }); + + it('removes extra keys if specified', () => { + const payload = { + type, + host: 0.1, + value: 'superfluous', + extra: 'even more', + }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual({ type, host: 0.1 }); + }); + }); + + describe('risk category weights', () => { + beforeEach(() => { + type = RiskWeightTypes.riskCategory; + }); + + it('requires a value', () => { + const payload = { type, user: 0.1 }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseError; + + expect(decoded.success).toBeFalsy(); + expect(stringifyZodError(decoded.error)).toEqual( + 'type: Invalid literal value, expected "global_identifier", host: Required, type: Invalid literal value, expected "global_identifier", value: Invalid literal value, expected "category_1", host: Required, and 1 more' + ); + }); + + it('rejects if neither host nor user weight are specified', () => { + const payload = { type, value: RiskCategories.category_1 }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseError; + + expect(decoded.success).toBeFalsy(); + expect(stringifyZodError(decoded.error)).toEqual( + 'type: Invalid literal value, expected "global_identifier", host: Required, type: Invalid literal value, expected "global_identifier", user: Required, host: Required, and 1 more' + ); + }); + + it('allows a single host weight', () => { + const payload = { type, value: RiskCategories.category_1, host: 0.1 }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual(payload); + }); + + it('allows a single user weight', () => { + const payload = { type, value: RiskCategories.category_1, user: 0.1 }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual(payload); + }); + + it('allows both a host and user weight', () => { + const payload = { type, value: RiskCategories.category_1, user: 0.1, host: 0.5 }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual(payload); + }); + + it('rejects a weight outside of 0-1', () => { + const payload = { type, value: RiskCategories.category_1, host: -5 }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseError; + + expect(decoded.success).toBeFalsy(); + expect(stringifyZodError(decoded.error)).toContain( + `host: Number must be greater than or equal to 0` + ); + }); + + it('removes extra keys if specified', () => { + const payload = { + type, + value: RiskCategories.category_1, + host: 0.1, + extra: 'even more', + }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual({ type, value: RiskCategories.category_1, host: 0.1 }); + }); + + describe('allowed category values', () => { + it('allows the alerts type for a category', () => { + const payload = { + type, + value: RiskCategories.category_1, + host: 0.1, + }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseSuccess; + + expect(decoded.success).toBeTruthy(); + expect(decoded.data).toEqual(payload); + }); + + it('rejects an unknown category value', () => { + const payload = { + type, + value: 'unknown', + host: 0.1, + }; + const decoded = RiskScoreWeight.safeParse(payload) as SafeParseError; + + expect(decoded.success).toBeFalsy(); + expect(stringifyZodError(decoded.error)).toContain( + 'type: Invalid literal value, expected "global_identifier", type: Invalid literal value, expected "global_identifier", user: Required, value: Invalid literal value, expected "category_1", value: Invalid literal value, expected "category_1", and 1 more' + ); + }); + }); + }); + }); +}); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/calculation_route.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/calculation_route.gen.ts new file mode 100644 index 0000000000000..892f0f2228bd8 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/calculation_route.gen.ts @@ -0,0 +1,90 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from 'zod'; + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Risk Scoring API + * version: 1 + */ + +import { + AfterKeys, + DataViewId, + Filter, + PageSize, + IdentifierType, + DateRange, + RiskScoreWeights, + EntityRiskScoreRecord, +} from '../common/common.gen'; + +export type RiskScoresCalculationRequest = z.infer; +export const RiskScoresCalculationRequest = z.object({ + /** + * Used to calculate a specific "page" of risk scores. If unspecified, the first "page" of scores is returned. See also the `after_keys` key in a risk scores response. + */ + after_keys: AfterKeys.optional(), + /** + * The identifier of the Kibana data view to be used when generating risk scores. If a data view is not found, the provided ID will be used as the query's index pattern instead. + */ + data_view_id: DataViewId, + /** + * If set to `true`, the internal ES requests/responses will be logged in Kibana. + */ + debug: z.boolean().optional(), + /** + * An elasticsearch DSL filter object. Used to filter the data being scored, which implicitly filters the risk scores calculated. + */ + filter: Filter.optional(), + page_size: PageSize.optional(), + /** + * Used to restrict the type of risk scores calculated. + */ + identifier_type: IdentifierType, + /** + * Defines the time period over which scores will be evaluated. If unspecified, a range of `[now, now-30d]` will be used. + */ + range: DateRange, + weights: RiskScoreWeights.optional(), +}); + +export type RiskScoresCalculationResponse = z.infer; +export const RiskScoresCalculationResponse = z.object({ + /** + * Used to obtain the next "page" of risk scores. See also the `after_keys` key in a risk scores request. If this key is empty, the calculation is complete. + */ + after_keys: AfterKeys, + /** + * A list of errors encountered during the calculation. + */ + errors: z.array(z.string()), + /** + * The number of risk scores persisted to elasticsearch. + */ + scores_written: z.number(), + scores: z + .object({ + /** + * A list of host risk scores + */ + host: z.array(EntityRiskScoreRecord).optional(), + /** + * A list of user risk scores + */ + user: z.array(EntityRiskScoreRecord).optional(), + /** + * If 'wait_for' the request will wait for the index refresh. + */ + refresh: z.literal('wait_for').optional(), + }) + .optional(), +}); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/calculation_route_schema.yml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/calculation_route.schema.yaml similarity index 69% rename from x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/calculation_route_schema.yml rename to x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/calculation_route.schema.yaml index c851509c4f64a..2b1a6d39b8844 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/calculation_route_schema.yml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/calculation_route.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.0 info: - version: 1.0.0 + version: '1' title: Risk Scoring API description: These APIs allow the consumer to manage Entity Risk Scores within Entity Analytics. @@ -46,28 +46,27 @@ components: properties: after_keys: description: Used to calculate a specific "page" of risk scores. If unspecified, the first "page" of scores is returned. See also the `after_keys` key in a risk scores response. - allOf: - - $ref: 'common.yml#/components/schemas/AfterKeys' + $ref: '../common/common.schema.yaml#/components/schemas/AfterKeys' data_view_id: - $ref: 'common.yml#/components/schemas/DataViewId' + $ref: '../common/common.schema.yaml#/components/schemas/DataViewId' description: The identifier of the Kibana data view to be used when generating risk scores. If a data view is not found, the provided ID will be used as the query's index pattern instead. debug: description: If set to `true`, the internal ES requests/responses will be logged in Kibana. type: boolean filter: - $ref: 'common.yml#/components/schemas/Filter' + $ref: '../common/common.schema.yaml#/components/schemas/Filter' description: An elasticsearch DSL filter object. Used to filter the data being scored, which implicitly filters the risk scores calculated. page_size: - $ref: 'common.yml#/components/schemas/PageSize' + $ref: '../common/common.schema.yaml#/components/schemas/PageSize' identifier_type: description: Used to restrict the type of risk scores calculated. allOf: - - $ref: 'common.yml#/components/schemas/IdentifierType' + - $ref: '../common/common.schema.yaml#/components/schemas/IdentifierType' range: - $ref: 'common.yml#/components/schemas/DateRange' + $ref: '../common/common.schema.yaml#/components/schemas/DateRange' description: Defines the time period over which scores will be evaluated. If unspecified, a range of `[now, now-30d]` will be used. weights: - $ref: 'common.yml#/components/schemas/RiskScoreWeights' + $ref: '../common/common.schema.yaml#/components/schemas/RiskScoreWeights' RiskScoresCalculationResponse: type: object @@ -79,7 +78,7 @@ components: after_keys: description: Used to obtain the next "page" of risk scores. See also the `after_keys` key in a risk scores request. If this key is empty, the calculation is complete. allOf: - - $ref: 'common.yml#/components/schemas/AfterKeys' + - $ref: '../common/common.schema.yaml#/components/schemas/AfterKeys' errors: type: array description: A list of errors encountered during the calculation. @@ -89,3 +88,20 @@ components: type: number format: integer description: The number of risk scores persisted to elasticsearch. + scores: + type: object + properties: + host: + type: array + items: + $ref: '../common/common.schema.yaml#/components/schemas/EntityRiskScoreRecord' + description: A list of host risk scores + user: + type: array + items: + $ref: '../common/common.schema.yaml#/components/schemas/EntityRiskScoreRecord' + description: A list of user risk scores + refresh: + type: string + enum: [wait_for] + description: If 'wait_for' the request will wait for the index refresh. diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/common.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/common.gen.ts deleted file mode 100644 index 3e4f3155ca70b..0000000000000 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/common.gen.ts +++ /dev/null @@ -1,169 +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 { z } from 'zod'; - -/* - * NOTICE: Do not edit this file manually. - * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. - * - * info: - * title: Risk Engine Common Schema - * version: 1.0.0 - */ - -export type AfterKeys = z.infer; -export const AfterKeys = z.object({ - host: z.object({}).catchall(z.string()).optional(), - user: z.object({}).catchall(z.string()).optional(), -}); - -/** - * The identifier of the Kibana data view to be used when generating risk scores. - */ -export type DataViewId = z.infer; -export const DataViewId = z.string(); - -/** - * An elasticsearch DSL filter object. Used to filter the risk inputs involved, which implicitly filters the risk scores themselves. See https://cloud.elastic.co/api/v1/api-docs/spec.json#/definitions/QueryContainer - */ -export type Filter = z.infer; -export const Filter = z.object({}); - -/** - * Specifies how many scores will be involved in a given calculation. Note that this value is per `identifier_type`, i.e. a value of 10 will calculate 10 host scores and 10 user scores, if available. To avoid missed data, keep this value consistent while paginating through scores. - */ -export type PageSize = z.infer; -export const PageSize = z.number().default(1000); - -export type KibanaDate = z.infer; -export const KibanaDate = z.union([z.string(), z.string().datetime(), z.string()]); - -/** - * Defines the time period on which risk inputs will be filtered. - */ -export type DateRange = z.infer; -export const DateRange = z.object({ - start: KibanaDate, - end: KibanaDate, -}); - -export type IdentifierType = z.infer; -export const IdentifierType = z.enum(['host', 'user']); -export type IdentifierTypeEnum = typeof IdentifierType.enum; -export const IdentifierTypeEnum = IdentifierType.enum; - -/** - * A generic representation of a document contributing to a Risk Score. - */ -export type RiskScoreInput = z.infer; -export const RiskScoreInput = z.object({ - /** - * The unique identifier (`_id`) of the original source document - */ - id: z.string().optional(), - /** - * The unique index (`_index`) of the original source document - */ - index: z.string().optional(), - /** - * The risk category of the risk input document. - */ - category: z.string().optional(), - /** - * A human-readable description of the risk input document. - */ - description: z.string().optional(), - /** - * The weighted risk score of the risk input document. - */ - risk_score: z.number().min(0).max(100).optional(), - /** - * The @timestamp of the risk input document. - */ - timestamp: z.string().optional(), -}); - -export type RiskScore = z.infer; -export const RiskScore = z.object({ - /** - * The time at which the risk score was calculated. - */ - '@timestamp': z.string().datetime(), - /** - * The identifier field defining this risk score. Coupled with `id_value`, uniquely identifies the entity being scored. - */ - id_field: z.string(), - /** - * The identifier value defining this risk score. Coupled with `id_field`, uniquely identifies the entity being scored. - */ - id_value: z.string(), - /** - * Lexical description of the entity's risk. - */ - calculated_level: z.string(), - /** - * The raw numeric value of the given entity's risk score. - */ - calculated_score: z.number(), - /** - * The normalized numeric value of the given entity's risk score. Useful for comparing with other entities. - */ - calculated_score_norm: z.number().min(0).max(100), - /** - * The contribution of Category 1 to the overall risk score (`calculated_score_norm`). Category 1 contains Detection Engine Alerts. - */ - category_1_score: z.number(), - /** - * The number of risk input documents that contributed to the Category 1 score (`category_1_score`). - */ - category_1_count: z.number(), - /** - * The contribution of Category 2 to the overall risk score (`calculated_score_norm`). Category 2 contains context from external sources. - */ - category_2_score: z.number().optional(), - /** - * The number of risk input documents that contributed to the Category 2 score (`category_2_score`). - */ - category_2_count: z.number().optional(), - /** - * The designated criticality level of the entity. Possible values are `low_impact`, `medium_impact`, `high_impact`, and `extreme_impact`. - */ - criticality_level: z.string().optional(), - /** - * The numeric modifier corresponding to the criticality level of the entity, which is used as an input to the risk score calculation. - */ - criticality_modifier: z.number().optional(), - /** - * A list of the highest-risk documents contributing to this risk score. Useful for investigative purposes. - */ - inputs: z.array(RiskScoreInput), -}); - -/** - * Configuration used to tune risk scoring. Weights can be used to change the score contribution of risk inputs for hosts and users at both a global level and also for Risk Input categories (e.g. 'category_1'). - */ -export type RiskScoreWeight = z.infer; -export const RiskScoreWeight = z.object({ - type: z.string(), - value: z.string().optional(), - host: z.number().min(0).max(1).optional(), - user: z.number().min(0).max(1).optional(), -}); - -/** - * A list of weights to be applied to the scoring calculation. - */ -export type RiskScoreWeights = z.infer; -export const RiskScoreWeights = z.array(RiskScoreWeight); - -export type RiskEngineInitStep = z.infer; -export const RiskEngineInitStep = z.object({ - type: z.string(), - success: z.boolean(), - error: z.string().optional(), -}); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/common.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/common.schema.yaml deleted file mode 100644 index b208050fb4b22..0000000000000 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/common.schema.yaml +++ /dev/null @@ -1,224 +0,0 @@ -openapi: 3.0.0 -info: - title: Risk Engine Common Schema - description: Common schema for Risk Engine APIs - version: 1.0.0 - -paths: { } - -components: - schemas: - - AfterKeys: - type: object - properties: - host: - type: object - additionalProperties: - type: string - user: - type: object - additionalProperties: - type: string - example: - host: - 'host.name': 'example.host' - user: - 'user.name': 'example_user_name' - - DataViewId: - description: The identifier of the Kibana data view to be used when generating risk scores. - example: security-solution-default - type: string - - Filter: - type: object - description: An elasticsearch DSL filter object. Used to filter the risk inputs involved, which implicitly filters the risk scores themselves. See https://cloud.elastic.co/api/v1/api-docs/spec.json#/definitions/QueryContainer - - PageSize: - description: Specifies how many scores will be involved in a given calculation. Note that this value is per `identifier_type`, i.e. a value of 10 will calculate 10 host scores and 10 user scores, if available. To avoid missed data, keep this value consistent while paginating through scores. - default: 1000 - type: number - - KibanaDate: - oneOf: - - type: string - format: date - - type: string - format: date-time - - type: string - format: datemath - example: '2017-07-21T17:32:28Z' - - DateRange: - description: Defines the time period on which risk inputs will be filtered. - type: object - required: - - start - - end - properties: - start: - $ref: '#/components/schemas/KibanaDate' - end: - $ref: '#/components/schemas/KibanaDate' - - IdentifierType: - type: string - enum: - - host - - user - - RiskScoreInput: - description: A generic representation of a document contributing to a Risk Score. - type: object - properties: - id: - type: string - example: 91a93376a507e86cfbf282166275b89f9dbdb1f0be6c8103c6ff2909ca8e1a1c - description: The unique identifier (`_id`) of the original source document - index: - type: string - example: .internal.alerts-security.alerts-default-000001 - description: The unique index (`_index`) of the original source document - category: - type: string - example: category_1 - description: The risk category of the risk input document. - description: - type: string - example: 'Generated from Detection Engine Rule: Malware Prevention Alert' - description: A human-readable description of the risk input document. - risk_score: - type: number - format: double - minimum: 0 - maximum: 100 - description: The weighted risk score of the risk input document. - timestamp: - type: string - example: '2017-07-21T17:32:28Z' - description: The @timestamp of the risk input document. - - - RiskScore: - type: object - required: - - '@timestamp' - - id_field - - id_value - - calculated_level - - calculated_score - - calculated_score_norm - - category_1_score - - category_1_count - - inputs - properties: - '@timestamp': - type: string - format: 'date-time' - example: '2017-07-21T17:32:28Z' - description: The time at which the risk score was calculated. - id_field: - type: string - example: 'host.name' - description: The identifier field defining this risk score. Coupled with `id_value`, uniquely identifies the entity being scored. - id_value: - type: string - example: 'example.host' - description: The identifier value defining this risk score. Coupled with `id_field`, uniquely identifies the entity being scored. - calculated_level: - type: string - example: 'Critical' - description: Lexical description of the entity's risk. - calculated_score: - type: number - format: double - description: The raw numeric value of the given entity's risk score. - calculated_score_norm: - type: number - format: double - minimum: 0 - maximum: 100 - description: The normalized numeric value of the given entity's risk score. Useful for comparing with other entities. - category_1_score: - type: number - format: double - description: The contribution of Category 1 to the overall risk score (`calculated_score_norm`). Category 1 contains Detection Engine Alerts. - category_1_count: - type: number - format: integer - description: The number of risk input documents that contributed to the Category 1 score (`category_1_score`). - category_2_score: - type: number - format: double - description: The contribution of Category 2 to the overall risk score (`calculated_score_norm`). Category 2 contains context from external sources. - category_2_count: - type: number - format: integer - description: The number of risk input documents that contributed to the Category 2 score (`category_2_score`). - criticality_level: - type: string - example: extreme_impact - description: The designated criticality level of the entity. Possible values are `low_impact`, `medium_impact`, `high_impact`, and `extreme_impact`. - criticality_modifier: - type: number - format: double - description: The numeric modifier corresponding to the criticality level of the entity, which is used as an input to the risk score calculation. - inputs: - type: array - description: A list of the highest-risk documents contributing to this risk score. Useful for investigative purposes. - items: - $ref: '#/components/schemas/RiskScoreInput' - - RiskScoreWeight: - description: "Configuration used to tune risk scoring. Weights can be used to change the score contribution of risk inputs for hosts and users at both a global level and also for Risk Input categories (e.g. 'category_1')." - type: object - required: - - type - properties: - type: - type: string - value: - type: string - host: - type: number - format: double - minimum: 0 - maximum: 1 - user: - type: number - format: double - minimum: 0 - maximum: 1 - example: - type: 'risk_category' - value: 'category_1' - host: 0.8 - user: 0.4 - - RiskScoreWeights: - description: 'A list of weights to be applied to the scoring calculation.' - type: array - items: - $ref: '#/components/schemas/RiskScoreWeight' - example: - - type: 'risk_category' - value: 'category_1' - host: 0.8 - user: 0.4 - - type: 'global_identifier' - host: 0.5 - user: 0.1 - - RiskEngineInitStep: - type: object - required: - - type - - success - properties: - type: - type: string - success: - type: boolean - error: - type: string diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_disable_route.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_disable_route.gen.ts new file mode 100644 index 0000000000000..723f8ecfcf037 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_disable_route.gen.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from 'zod'; + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Risk Scoring API + * version: 1 + */ + +export type RiskEngineDisableResponse = z.infer; +export const RiskEngineDisableResponse = z.object({ + success: z.boolean().optional(), +}); + +export type RiskEngineDisableErrorResponse = z.infer; +export const RiskEngineDisableErrorResponse = z.object({ + message: z.string(), + full_error: z.string(), +}); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_disable_route_schema.yml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_disable_route.schema.yaml similarity index 54% rename from x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_disable_route_schema.yml rename to x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_disable_route.schema.yaml index 71d4c96681814..b28d452a68830 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_disable_route_schema.yml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_disable_route.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.0 info: - version: 1.0.0 + version: '1' title: Risk Scoring API description: These APIs allow the consumer to manage Entity Risk Scores within Entity Analytics. @@ -27,6 +27,18 @@ paths: application/json: schema: $ref: '#/components/schemas/RiskEngineDisableResponse' + '400': + description: Task manager is unavailable + content: + application/json: + schema: + $ref: '../common/common.schema.yaml#/components/schemas/TaskManagerUnavailableResponse' + default: + description: Unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/RiskEngineDisableErrorResponse' components: schemas: @@ -35,3 +47,13 @@ components: properties: success: type: boolean + RiskEngineDisableErrorResponse: + type: object + required: + - message + - full_error + properties: + message: + type: string + full_error: + type: string diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_enable_route.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_enable_route.gen.ts new file mode 100644 index 0000000000000..d2fadee44700f --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_enable_route.gen.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from 'zod'; + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Risk Scoring API + * version: 1 + */ + +export type RiskEngineEnableResponse = z.infer; +export const RiskEngineEnableResponse = z.object({ + success: z.boolean().optional(), +}); + +export type RiskEngineEnableErrorResponse = z.infer; +export const RiskEngineEnableErrorResponse = z.object({ + message: z.string(), + full_error: z.string(), +}); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_enable_route_schema.yml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_enable_route.schema.yaml similarity index 54% rename from x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_enable_route_schema.yml rename to x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_enable_route.schema.yaml index 42e4ec7af0a50..8f010537e3791 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_enable_route_schema.yml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_enable_route.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.0 info: - version: 1.0.0 + version: '1' title: Risk Scoring API description: These APIs allow the consumer to manage Entity Risk Scores within Entity Analytics. @@ -27,6 +27,18 @@ paths: application/json: schema: $ref: '#/components/schemas/RiskEngineEnableResponse' + '400': + description: Task manager is unavailable + content: + application/json: + schema: + $ref: '../common/common.schema.yaml#/components/schemas/TaskManagerUnavailableResponse' + default: + description: Unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/RiskEngineEnableErrorResponse' components: schemas: @@ -35,3 +47,13 @@ components: properties: success: type: boolean + RiskEngineEnableErrorResponse: + type: object + required: + - message + - full_error + properties: + message: + type: string + full_error: + type: string diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_init_route.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_init_route.gen.ts new file mode 100644 index 0000000000000..f66177372bdeb --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_init_route.gen.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from 'zod'; + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Risk Scoring API + * version: 1 + */ + +export type RiskEngineInitResult = z.infer; +export const RiskEngineInitResult = z.object({ + risk_engine_enabled: z.boolean(), + risk_engine_resources_installed: z.boolean(), + risk_engine_configuration_created: z.boolean(), + legacy_risk_engine_disabled: z.boolean(), + errors: z.array(z.string()), +}); + +export type RiskEngineInitResponse = z.infer; +export const RiskEngineInitResponse = z.object({ + result: RiskEngineInitResult, +}); + +export type RiskEngineInitErrorResponse = z.infer; +export const RiskEngineInitErrorResponse = z.object({ + message: z.string(), + full_error: z.string(), +}); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_init_route.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_init_route.schema.yaml new file mode 100644 index 0000000000000..893bd88a1f485 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_init_route.schema.yaml @@ -0,0 +1,80 @@ +openapi: 3.0.0 +info: + version: '1' + title: Risk Scoring API + description: These APIs allow the consumer to manage Entity Risk Scores within Entity Analytics. +servers: + - url: 'http://{kibana_host}:{port}' + variables: + kibana_host: + default: localhost + port: + default: '5601' + +paths: + /internal/risk_score/engine/init: + post: + summary: Initialize the Risk Engine + description: Initializes the Risk Engine by creating the necessary indices and mappings, removing old transforms, and starting the new risk engine + responses: + '200': + description: Successful response + content: + application/json: + schema: + $ref: '#/components/schemas/RiskEngineInitResponse' + '400': + description: Task manager is unavailable + content: + application/json: + schema: + $ref: '../common/common.schema.yaml#/components/schemas/TaskManagerUnavailableResponse' + default: + description: Unexpected error + content: + application/json: + schema: + $ref: '#/components/schemas/RiskEngineInitErrorResponse' + +components: + schemas: + RiskEngineInitResult: + type: object + required: + - risk_engine_enabled + - risk_engine_resources_installed + - risk_engine_configuration_created + - legacy_risk_engine_disabled + - errors + properties: + risk_engine_enabled: + type: boolean + risk_engine_resources_installed: + type: boolean + risk_engine_configuration_created: + type: boolean + legacy_risk_engine_disabled: + type: boolean + errors: + type: array + items: + type: string + + RiskEngineInitResponse: + type: object + required: + - result + properties: + result: + $ref: '#/components/schemas/RiskEngineInitResult' + + RiskEngineInitErrorResponse: + type: object + required: + - message + - full_error + properties: + message: + type: string + full_error: + type: string diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_init_route_schema.yml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_init_route_schema.yml deleted file mode 100644 index daa6b3a33bb22..0000000000000 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_init_route_schema.yml +++ /dev/null @@ -1,46 +0,0 @@ -openapi: 3.0.0 -info: - version: 1.0.0 - title: Risk Scoring API - description: These APIs allow the consumer to manage Entity Risk Scores within Entity Analytics. -servers: - - url: 'http://{kibana_host}:{port}' - variables: - kibana_host: - default: localhost - port: - default: '5601' - -paths: - /internal/risk_score/engine/init: - post: - summary: Initialize the Risk Engine - description: Initializes the Risk Engine by creating the necessary indices and mappings, removing old transforms, and starting the new risk engine - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/RiskEngineInitResponse' - -components: - schemas: - RiskEngineInitResponse: - type: object - properties: - result: - type: object - properties: - risk_engine_enabled: - type: boolean - risk_engine_resources_installed: - type: boolean - risk_engine_configuration_created: - type: boolean - legacy_risk_engine_disabled: - type: boolean - errors: - type: array - items: - type: string diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_settings_route.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_settings_route.gen.ts index 3fb57161c9554..735de7e521c97 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_settings_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_settings_route.gen.ts @@ -13,7 +13,7 @@ import { z } from 'zod'; * * info: * title: Risk Scoring API - * version: 1.0.0 + * version: 1 */ import { DateRange } from '../common/common.gen'; diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_settings_route.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_settings_route.schema.yaml index cb67a3686822b..2f48c76d58f54 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_settings_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_settings_route.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - version: 1.0.0 + version: '1' title: Risk Scoring API description: These APIs allow the consumer to manage Entity Risk Scores within Entity Analytics. servers: diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.gen.ts new file mode 100644 index 0000000000000..bc94aff474e93 --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.gen.ts @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { z } from 'zod'; + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Risk Scoring API + * version: 1 + */ + +export type RiskEngineStatus = z.infer; +export const RiskEngineStatus = z.enum(['NOT_INSTALLED', 'DISABLED', 'ENABLED']); +export type RiskEngineStatusEnum = typeof RiskEngineStatus.enum; +export const RiskEngineStatusEnum = RiskEngineStatus.enum; + +export type RiskEngineStatusResponse = z.infer; +export const RiskEngineStatusResponse = z.object({ + legacy_risk_engine_status: RiskEngineStatus, + risk_engine_status: RiskEngineStatus, + /** + * Indicates whether the maximum amount of risk engines has been reached + */ + is_max_amount_of_risk_engines_reached: z.boolean(), +}); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route_schema.yml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.schema.yaml similarity index 89% rename from x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route_schema.yml rename to x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.schema.yaml index 4aed23d48a0d5..e182f9d70a9d8 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route_schema.yml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/engine_status_route.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - version: 1.0.0 + version: '1' title: Risk Scoring API description: These APIs allow the consumer to manage Entity Risk Scores within Entity Analytics. servers: @@ -25,9 +25,18 @@ paths: $ref: '#/components/schemas/RiskEngineStatusResponse' components: schemas: - + RiskEngineStatus: + type: string + enum: + - 'NOT_INSTALLED' + - 'DISABLED' + - 'ENABLED' RiskEngineStatusResponse: type: object + required: + - legacy_risk_engine_status + - risk_engine_status + - is_max_amount_of_risk_engines_reached properties: legacy_risk_engine_status: $ref: '#/components/schemas/RiskEngineStatus' @@ -36,10 +45,3 @@ components: is_max_amount_of_risk_engines_reached: description: Indicates whether the maximum amount of risk engines has been reached type: boolean - - RiskEngineStatus: - type: string - enum: - - 'NOT_INSTALLED' - - 'DISABLED' - - 'ENABLED' diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.gen.ts index f4d7c393f6e7f..2677043eb212f 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.gen.ts +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.gen.ts @@ -13,10 +13,10 @@ import { z } from 'zod'; * * info: * title: Risk Scoring API - * version: 1.0.0 + * version: 1 */ -import { IdentifierType, RiskScore } from './common.gen'; +import { IdentifierType, EntityRiskScoreRecord } from '../common/common.gen'; export type RiskScoresEntityCalculationRequest = z.infer; export const RiskScoresEntityCalculationRequest = z.object({ @@ -39,5 +39,5 @@ export type RiskScoresEntityCalculationResponse = z.infer< >; export const RiskScoresEntityCalculationResponse = z.object({ success: z.boolean(), - score: RiskScore.optional(), + score: EntityRiskScoreRecord.optional(), }); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.schema.yaml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.schema.yaml index d776f6363a01e..9c98125706912 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.schema.yaml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/entity_calculation_route.schema.yaml @@ -1,7 +1,7 @@ openapi: 3.0.0 info: - version: 1.0.0 + version: '1' title: Risk Scoring API description: These APIs allow the consumer to manage Entity Risk Scores within Entity Analytics. @@ -50,11 +50,11 @@ components: example: 'my.host' identifier_type: description: Used to define the type of entity. - $ref: './common.schema.yaml#/components/schemas/IdentifierType' + $ref: '../common/common.schema.yaml#/components/schemas/IdentifierType' refresh: - type: string - enum: [wait_for] - description: If 'wait_for' the request will wait for the index refresh. + type: string + enum: [wait_for] + description: If 'wait_for' the request will wait for the index refresh. RiskScoresEntityCalculationResponse: type: object @@ -64,4 +64,4 @@ components: success: type: boolean score: - $ref: './common.schema.yaml#/components/schemas/RiskScore' + $ref: '../common/common.schema.yaml#/components/schemas/EntityRiskScoreRecord' diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/preview_route.gen.ts b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/preview_route.gen.ts new file mode 100644 index 0000000000000..c4ea1192d24ef --- /dev/null +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/preview_route.gen.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 { z } from 'zod'; + +/* + * NOTICE: Do not edit this file manually. + * This file is automatically generated by the OpenAPI Generator, @kbn/openapi-generator. + * + * info: + * title: Risk Scoring API + * version: 1 + */ + +import { + DataViewId, + AfterKeys, + Filter, + PageSize, + IdentifierType, + DateRange, + RiskScoreWeights, + EntityRiskScoreRecord, +} from '../common/common.gen'; + +export type RiskScoresPreviewRequest = z.infer; +export const RiskScoresPreviewRequest = z.object({ + /** + * The identifier of the Kibana data view to be used when generating risk scores. If a data view is not found, the provided ID will be used as the query's index pattern instead. + */ + data_view_id: DataViewId, + /** + * Used to retrieve a specific "page" of risk scores. If unspecified, the first "page" of scores is returned. See also the `after_keys` key in a risk scores response. + */ + after_keys: AfterKeys.optional(), + /** + * If set to `true`, a `debug` key is added to the response, containing both the internal request and response with elasticsearch. + */ + debug: z.boolean().optional(), + /** + * An elasticsearch DSL filter object. Used to filter the data being scored, which implicitly filters the risk scores returned. + */ + filter: Filter.optional(), + page_size: PageSize.optional(), + /** + * Used to restrict the type of risk scores involved. If unspecified, both `host` and `user` scores will be returned. + */ + identifier_type: IdentifierType.optional(), + /** + * Defines the time period over which scores will be evaluated. If unspecified, a range of `[now, now-30d]` will be used. + */ + range: DateRange.optional(), + weights: RiskScoreWeights.optional(), +}); + +export type RiskScoresPreviewResponse = z.infer; +export const RiskScoresPreviewResponse = z.object({ + /** + * Used to obtain the next "page" of risk scores. See also the `after_keys` key in a risk scores request. If this key is empty, the calculation is complete. + */ + after_keys: AfterKeys, + /** + * Object containing debug information, particularly the internal request and response from elasticsearch + */ + debug: z + .object({ + request: z.string().optional(), + response: z.string().optional(), + }) + .optional(), + scores: z.object({ + /** + * A list of host risk scores + */ + host: z.array(EntityRiskScoreRecord).optional(), + /** + * A list of user risk scores + */ + user: z.array(EntityRiskScoreRecord).optional(), + }), +}); diff --git a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/preview_route_schema.yml b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/preview_route.schema.yaml similarity index 72% rename from x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/preview_route_schema.yml rename to x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/preview_route.schema.yaml index fc66d3ed882c9..1e21523c5f1fe 100644 --- a/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/preview_route_schema.yml +++ b/x-pack/plugins/security_solution/common/api/entity_analytics/risk_engine/preview_route.schema.yaml @@ -1,6 +1,6 @@ openapi: 3.0.0 info: - version: 1.0.0 + version: '1' title: Risk Scoring API description: These APIs allow the consumer to manage Entity Risk Scores within Entity Analytics. servers: @@ -40,30 +40,28 @@ components: required: - data_view_id properties: - after_keys: - description: Used to retrieve a specific "page" of risk scores. If unspecified, the first "page" of scores is returned. See also the `after_keys` key in a risk scores response. - allOf: - - $ref: 'common.yml#/components/schemas/AfterKeys' data_view_id: - $ref: 'common.yml#/components/schemas/DataViewId' + $ref: '../common/common.schema.yaml#/components/schemas/DataViewId' description: The identifier of the Kibana data view to be used when generating risk scores. If a data view is not found, the provided ID will be used as the query's index pattern instead. + after_keys: + description: Used to retrieve a specific "page" of risk scores. If unspecified, the first "page" of scores is returned. See also the `after_keys` key in a risk scores response. + $ref: '../common/common.schema.yaml#/components/schemas/AfterKeys' debug: description: If set to `true`, a `debug` key is added to the response, containing both the internal request and response with elasticsearch. type: boolean filter: - $ref: 'common.yml#/components/schemas/Filter' + $ref: '../common/common.schema.yaml#/components/schemas/Filter' description: An elasticsearch DSL filter object. Used to filter the data being scored, which implicitly filters the risk scores returned. page_size: - $ref: 'common.yml#/components/schemas/PageSize' + $ref: '../common/common.schema.yaml#/components/schemas/PageSize' identifier_type: description: Used to restrict the type of risk scores involved. If unspecified, both `host` and `user` scores will be returned. - allOf: - - $ref: 'common.yml#/components/schemas/IdentifierType' + $ref: '../common/common.schema.yaml#/components/schemas/IdentifierType' range: - $ref: 'common.yml#/components/schemas/DateRange' + $ref: '../common/common.schema.yaml#/components/schemas/DateRange' description: Defines the time period over which scores will be evaluated. If unspecified, a range of `[now, now-30d]` will be used. weights: - $ref: 'common.yml#/components/schemas/RiskScoreWeights' + $ref: '../common/common.schema.yaml#/components/schemas/RiskScoreWeights' RiskScoresPreviewResponse: type: object @@ -74,7 +72,7 @@ components: after_keys: description: Used to obtain the next "page" of risk scores. See also the `after_keys` key in a risk scores request. If this key is empty, the calculation is complete. allOf: - - $ref: 'common.yml#/components/schemas/AfterKeys' + - $ref: '../common/common.schema.yaml#/components/schemas/AfterKeys' debug: description: Object containing debug information, particularly the internal request and response from elasticsearch type: object @@ -84,7 +82,15 @@ components: response: type: string scores: - type: array - description: A list of risk scores - items: - $ref: 'common.yml#/components/schemas/RiskScore' + type: object + properties: + host: + type: array + items: + $ref: '../common/common.schema.yaml#/components/schemas/EntityRiskScoreRecord' + description: A list of host risk scores + user: + type: array + items: + $ref: '../common/common.schema.yaml#/components/schemas/EntityRiskScoreRecord' + description: A list of user risk scores diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/after_keys.test.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/after_keys.test.ts deleted file mode 100644 index 46664cd992e85..0000000000000 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/after_keys.test.ts +++ /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 { pipe } from 'fp-ts/lib/pipeable'; -import { left } from 'fp-ts/lib/Either'; -import { foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils'; - -import { afterKeysSchema } from './after_keys'; - -describe('after_keys schema', () => { - it('allows an empty object', () => { - const payload = {}; - const decoded = afterKeysSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual(payload); - }); - - it('allows a valid host key', () => { - const payload = { host: { 'host.name': 'hello' } }; - const decoded = afterKeysSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual(payload); - }); - - it('allows a valid user key', () => { - const payload = { user: { 'user.name': 'hello' } }; - const decoded = afterKeysSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual(payload); - }); - - it('allows both valid host and user keys', () => { - const payload = { user: { 'user.name': 'hello' }, host: { 'host.name': 'hello' } }; - const decoded = afterKeysSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual(payload); - }); - - it('removes an unknown identifier key if used', () => { - const payload = { bad: 'key' }; - const decoded = afterKeysSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual({}); - }); -}); diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/after_keys.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/after_keys.ts deleted file mode 100644 index 5c6e7a22025cd..0000000000000 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/after_keys.ts +++ /dev/null @@ -1,21 +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 * as t from 'io-ts'; - -const afterKeySchema = t.record(t.string, t.string); -export type AfterKeySchema = t.TypeOf; -export type AfterKey = AfterKeySchema; - -export const afterKeysSchema = t.exact( - t.partial({ - host: afterKeySchema, - user: afterKeySchema, - }) -); -export type AfterKeysSchema = t.TypeOf; -export type AfterKeys = AfterKeysSchema; diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/index.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/index.ts index bb75e496f386b..e352beb545904 100644 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/index.ts +++ b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/index.ts @@ -5,7 +5,6 @@ * 2.0. */ -export * from './after_keys'; export * from './risk_weights'; export * from './identifier_types'; export * from './range'; diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/privileges.test.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/privileges.test.ts index 5c25db68c87a1..e0111b3d67871 100644 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/privileges.test.ts +++ b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/privileges.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { EntityAnalyticsPrivileges } from '../../api/entity_analytics/common'; +import type { EntityAnalyticsPrivileges } from '../../api/entity_analytics/asset_criticality/get_asset_criticality_privileges.gen'; import { getMissingRiskEnginePrivileges } from './privileges'; describe('getMissingRiskEnginePrivileges', () => { diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/privileges.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/privileges.ts index add0a0e56efce..a375f5cb9195b 100644 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/privileges.ts +++ b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/privileges.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { EntityAnalyticsPrivileges } from '../../api/entity_analytics/common'; +import type { EntityAnalyticsPrivileges } from '../../api/entity_analytics/asset_criticality/get_asset_criticality_privileges.gen'; import { RISK_ENGINE_REQUIRED_ES_CLUSTER_PRIVILEGES, RISK_ENGINE_REQUIRED_ES_INDEX_PRIVILEGES, diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_levels.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_levels.ts index d2e777ad710a4..af3576b6c10af 100644 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_levels.ts +++ b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_levels.ts @@ -5,26 +5,27 @@ * 2.0. */ -import { RiskLevels } from './types'; +import type { EntityRiskLevels } from '../../api/entity_analytics/common'; +import { EntityRiskLevelsEnum } from '../../api/entity_analytics/common'; export const RISK_LEVEL_RANGES = { - [RiskLevels.unknown]: { start: 0, stop: 20 }, - [RiskLevels.low]: { start: 20, stop: 40 }, - [RiskLevels.moderate]: { start: 40, stop: 70 }, - [RiskLevels.high]: { start: 70, stop: 90 }, - [RiskLevels.critical]: { start: 90, stop: 100 }, + [EntityRiskLevelsEnum.Unknown]: { start: 0, stop: 20 }, + [EntityRiskLevelsEnum.Low]: { start: 20, stop: 40 }, + [EntityRiskLevelsEnum.Moderate]: { start: 40, stop: 70 }, + [EntityRiskLevelsEnum.High]: { start: 70, stop: 90 }, + [EntityRiskLevelsEnum.Critical]: { start: 90, stop: 100 }, }; -export const getRiskLevel = (riskScore: number): RiskLevels => { - if (riskScore >= RISK_LEVEL_RANGES[RiskLevels.critical].start) { - return RiskLevels.critical; - } else if (riskScore >= RISK_LEVEL_RANGES[RiskLevels.high].start) { - return RiskLevels.high; - } else if (riskScore >= RISK_LEVEL_RANGES[RiskLevels.moderate].start) { - return RiskLevels.moderate; - } else if (riskScore >= RISK_LEVEL_RANGES[RiskLevels.low].start) { - return RiskLevels.low; +export const getRiskLevel = (riskScore: number): EntityRiskLevels => { + if (riskScore >= RISK_LEVEL_RANGES[EntityRiskLevelsEnum.Critical].start) { + return EntityRiskLevelsEnum.Critical; + } else if (riskScore >= RISK_LEVEL_RANGES[EntityRiskLevelsEnum.High].start) { + return EntityRiskLevelsEnum.High; + } else if (riskScore >= RISK_LEVEL_RANGES[EntityRiskLevelsEnum.Moderate].start) { + return EntityRiskLevelsEnum.Moderate; + } else if (riskScore >= RISK_LEVEL_RANGES[EntityRiskLevelsEnum.Low].start) { + return EntityRiskLevelsEnum.Low; } else { - return RiskLevels.unknown; + return EntityRiskLevelsEnum.Unknown; } }; diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_score_calculation/request_schema.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_score_calculation/request_schema.ts deleted file mode 100644 index c05ca782aface..0000000000000 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_score_calculation/request_schema.ts +++ /dev/null @@ -1,31 +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 * as t from 'io-ts'; -import { afterKeysSchema } from '../after_keys'; -import { identifierTypeSchema } from '../identifier_types'; -import { riskWeightsSchema } from '../risk_weights/schema'; - -export const riskScoreCalculationRequestSchema = t.exact( - t.intersection([ - t.type({ - data_view_id: t.string, - identifier_type: identifierTypeSchema, - range: t.type({ - start: t.string, - end: t.string, - }), - }), - t.partial({ - after_keys: afterKeysSchema, - debug: t.boolean, - filter: t.unknown, - page_size: t.number, - weights: riskWeightsSchema, - }), - ]) -); diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_score_preview/request_schema.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_score_preview/request_schema.ts deleted file mode 100644 index 76ee6a303532b..0000000000000 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_score_preview/request_schema.ts +++ /dev/null @@ -1,30 +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 * as t from 'io-ts'; -import { afterKeysSchema } from '../after_keys'; -import { identifierTypeSchema } from '../identifier_types'; -import { rangeSchema } from '../range'; -import { riskWeightsSchema } from '../risk_weights/schema'; - -export const riskScorePreviewRequestSchema = t.exact( - t.intersection([ - t.type({ - data_view_id: t.string, - }), - t.partial({ - after_keys: afterKeysSchema, - debug: t.boolean, - filter: t.unknown, - page_size: t.number, - identifier_type: identifierTypeSchema, - range: rangeSchema, - weights: riskWeightsSchema, - }), - ]) -); -export type RiskScorePreviewRequestSchema = t.TypeOf; diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_weights/index.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_weights/index.ts index 8aa51f283cef7..6cc0ccaa93a6d 100644 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_weights/index.ts +++ b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_weights/index.ts @@ -6,4 +6,3 @@ */ export * from './types'; -export type { RiskWeight, RiskWeights, GlobalRiskWeight, RiskCategoryRiskWeight } from './schema'; diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_weights/schema.test.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_weights/schema.test.ts deleted file mode 100644 index 60c83f47b57c6..0000000000000 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_weights/schema.test.ts +++ /dev/null @@ -1,234 +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 { pipe } from 'fp-ts/lib/pipeable'; -import { left } from 'fp-ts/lib/Either'; -import { foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils'; - -import { riskWeightSchema } from './schema'; -import { RiskCategories, RiskWeightTypes } from './types'; - -describe('risk weight schema', () => { - let type: string; - - describe('allowed types', () => { - it('allows the global weight type', () => { - const payload = { - type: RiskWeightTypes.global, - host: 0.1, - }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual(payload); - }); - - it('allows the risk category weight type', () => { - const payload = { - type: RiskWeightTypes.global, - host: 0.1, - }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual(payload); - }); - - it('rejects an unknown weight type', () => { - const payload = { - type: 'unknown', - host: 0.1, - }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors)).length).toBeGreaterThan(0); - expect(message.schema).toEqual({}); - }); - }); - - describe('conditional fields', () => { - describe('global weights', () => { - beforeEach(() => { - type = RiskWeightTypes.global; - }); - - it('rejects if neither host nor user weight are specified', () => { - const payload = { type }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([ - 'Invalid value "undefined" supplied to "host"', - 'Invalid value "undefined" supplied to "user"', - ]); - expect(message.schema).toEqual({}); - }); - - it('allows a single host weight', () => { - const payload = { type, host: 0.1 }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual(payload); - }); - - it('allows a single user weight', () => { - const payload = { type, user: 0.1 }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual(payload); - }); - - it('allows both a host and user weight', () => { - const payload = { type, host: 0.1, user: 0.5 }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual({ type, host: 0.1, user: 0.5 }); - }); - - it('rejects a weight outside of 0-1', () => { - const payload = { type, user: 55 }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toContain('Invalid value "55" supplied to "user"'); - expect(message.schema).toEqual({}); - }); - - it('removes extra keys if specified', () => { - const payload = { - type, - host: 0.1, - value: 'superfluous', - extra: 'even more', - }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual({ type, host: 0.1 }); - }); - }); - - describe('risk category weights', () => { - beforeEach(() => { - type = RiskWeightTypes.riskCategory; - }); - - it('requires a value', () => { - const payload = { type, user: 0.1 }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([ - 'Invalid value "undefined" supplied to "value"', - ]); - expect(message.schema).toEqual({}); - }); - - it('rejects if neither host nor user weight are specified', () => { - const payload = { type, value: RiskCategories.category_1 }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([ - 'Invalid value "undefined" supplied to "host"', - 'Invalid value "undefined" supplied to "user"', - ]); - expect(message.schema).toEqual({}); - }); - - it('allows a single host weight', () => { - const payload = { type, value: RiskCategories.category_1, host: 0.1 }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual(payload); - }); - - it('allows a single user weight', () => { - const payload = { type, value: RiskCategories.category_1, user: 0.1 }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual(payload); - }); - - it('allows both a host and user weight', () => { - const payload = { type, value: RiskCategories.category_1, user: 0.1, host: 0.5 }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual(payload); - }); - - it('rejects a weight outside of 0-1', () => { - const payload = { type, value: RiskCategories.category_1, host: -5 }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toContain('Invalid value "-5" supplied to "host"'); - expect(message.schema).toEqual({}); - }); - - it('removes extra keys if specified', () => { - const payload = { - type, - value: RiskCategories.category_1, - host: 0.1, - extra: 'even more', - }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual({ type, value: RiskCategories.category_1, host: 0.1 }); - }); - - describe('allowed category values', () => { - it('allows the alerts type for a category', () => { - const payload = { - type, - value: RiskCategories.category_1, - host: 0.1, - }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toEqual([]); - expect(message.schema).toEqual(payload); - }); - - it('rejects an unknown category value', () => { - const payload = { - type, - value: 'unknown', - host: 0.1, - }; - const decoded = riskWeightSchema.decode(payload); - const message = pipe(decoded, foldLeftRight); - - expect(getPaths(left(message.errors))).toContain( - 'Invalid value "unknown" supplied to "value"' - ); - expect(message.schema).toEqual({}); - }); - }); - }); - }); -}); diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_weights/schema.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_weights/schema.ts deleted file mode 100644 index 16a8a6da03ae6..0000000000000 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/risk_weights/schema.ts +++ /dev/null @@ -1,57 +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 * as t from 'io-ts'; -import { NumberBetweenZeroAndOneInclusive } from '@kbn/securitysolution-io-ts-types'; - -import { fromEnum } from '../utils'; -import { RiskCategories, RiskWeightTypes } from './types'; - -const hostWeight = t.type({ - host: NumberBetweenZeroAndOneInclusive, -}); - -const userWeight = t.type({ - user: NumberBetweenZeroAndOneInclusive, -}); - -const identifierWeights = t.union([ - t.exact(t.intersection([hostWeight, userWeight])), - t.exact(t.intersection([hostWeight, t.partial({ user: t.undefined })])), - t.exact(t.intersection([userWeight, t.partial({ host: t.undefined })])), -]); - -const riskCategories = fromEnum('riskCategories', RiskCategories); - -const globalRiskWeightSchema = t.intersection([ - t.exact( - t.type({ - type: t.literal(RiskWeightTypes.global), - }) - ), - identifierWeights, -]); -export type GlobalRiskWeight = t.TypeOf; - -const riskCategoryRiskWeightSchema = t.intersection([ - t.exact( - t.type({ - type: t.literal(RiskWeightTypes.riskCategory), - value: riskCategories, - }) - ), - identifierWeights, -]); -export type RiskCategoryRiskWeight = t.TypeOf; - -export const riskWeightSchema = t.union([globalRiskWeightSchema, riskCategoryRiskWeightSchema]); -export type RiskWeightSchema = t.TypeOf; -export type RiskWeight = RiskWeightSchema; - -export const riskWeightsSchema = t.array(riskWeightSchema); -export type RiskWeightsSchema = t.TypeOf; -export type RiskWeights = RiskWeightsSchema; diff --git a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/types.ts b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/types.ts index c496cdab418b5..a6c429126e297 100644 --- a/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/types.ts +++ b/x-pack/plugins/security_solution/common/entity_analytics/risk_engine/types.ts @@ -5,20 +5,13 @@ * 2.0. */ -import type { CriticalityLevel } from '../asset_criticality/types'; -import type { RiskCategories } from './risk_weights/types'; +import type { EntityRiskScoreRecord, RiskScoreInput } from '../../api/entity_analytics/common'; export enum RiskScoreEntity { host = 'host', user = 'user', } -export enum RiskEngineStatus { - NOT_INSTALLED = 'NOT_INSTALLED', - DISABLED = 'DISABLED', - ENABLED = 'ENABLED', -} - export interface InitRiskEngineResult { legacyRiskEngineDisabled: boolean; riskEngineResourcesInstalled: boolean; @@ -26,55 +19,16 @@ export interface InitRiskEngineResult { riskEngineEnabled: boolean; errors: string[]; } - -export interface EntityRiskInput { - id: string; - index: string; - category: RiskCategories; - description: string; - risk_score: string | number | undefined; - timestamp: string | undefined; - contribution_score?: number; -} - export interface EcsRiskScore { '@timestamp': string; host?: { name: string; - risk: Omit; + risk: Omit; }; user?: { name: string; - risk: Omit; + risk: Omit; }; } -export type RiskInputs = EntityRiskInput[]; - -/** - * The API response object representing a risk score - */ -export interface RiskScore { - '@timestamp': string; - id_field: string; - id_value: string; - criticality_level?: CriticalityLevel; - criticality_modifier?: number | undefined; - calculated_level: RiskLevels; - calculated_score: number; - calculated_score_norm: number; - category_1_score: number; - category_1_count: number; - category_2_score?: number; - category_2_count?: number; - notes: string[]; - inputs: RiskInputs; -} - -export enum RiskLevels { - unknown = 'Unknown', - low = 'Low', - moderate = 'Moderate', - high = 'High', - critical = 'Critical', -} +export type RiskInputs = RiskScoreInput[]; diff --git a/x-pack/plugins/security_solution/common/search_strategy/security_solution/risk_score/all/index.ts b/x-pack/plugins/security_solution/common/search_strategy/security_solution/risk_score/all/index.ts index b2322ad64c575..255a76e23f9f9 100644 --- a/x-pack/plugins/security_solution/common/search_strategy/security_solution/risk_score/all/index.ts +++ b/x-pack/plugins/security_solution/common/search_strategy/security_solution/risk_score/all/index.ts @@ -7,9 +7,9 @@ import type { IEsSearchResponse } from '@kbn/search-types'; +import { EntityRiskLevels, EntityRiskLevelsEnum } from '../../../../api/entity_analytics/common'; +import type { EntityRiskScoreRecord } from '../../../../api/entity_analytics/common'; import type { Inspect, Maybe, SortField } from '../../../common'; -import type { RiskScore } from '../../../../entity_analytics/risk_engine'; -import { RiskLevels as RiskSeverity } from '../../../../entity_analytics/risk_engine'; export interface HostsRiskScoreStrategyResponse extends IEsSearchResponse { inspect?: Maybe; @@ -23,12 +23,13 @@ export interface UsersRiskScoreStrategyResponse extends IEsSearchResponse { data: UserRiskScore[] | undefined; } -export interface RiskStats extends RiskScore { +export interface RiskStats extends EntityRiskScoreRecord { rule_risks: RuleRisk[]; multipliers: string[]; } -export { RiskSeverity }; +export const RiskSeverity = EntityRiskLevels.enum; +export type RiskSeverity = EntityRiskLevels; export interface HostRiskScore { '@timestamp': string; @@ -76,8 +77,8 @@ export interface RiskScoreItem { [RiskScoreFields.timestamp]: Maybe; - [RiskScoreFields.hostRisk]: Maybe; - [RiskScoreFields.userRisk]: Maybe; + [RiskScoreFields.hostRisk]: Maybe; + [RiskScoreFields.userRisk]: Maybe; [RiskScoreFields.hostRiskScore]: Maybe; [RiskScoreFields.userRiskScore]: Maybe; @@ -89,9 +90,9 @@ export const isUserRiskScore = (risk: HostRiskScore | UserRiskScore): risk is Us 'user' in risk; export const EMPTY_SEVERITY_COUNT = { - [RiskSeverity.critical]: 0, - [RiskSeverity.high]: 0, - [RiskSeverity.low]: 0, - [RiskSeverity.moderate]: 0, - [RiskSeverity.unknown]: 0, + [EntityRiskLevelsEnum.Critical]: 0, + [EntityRiskLevelsEnum.High]: 0, + [EntityRiskLevelsEnum.Low]: 0, + [EntityRiskLevelsEnum.Moderate]: 0, + [EntityRiskLevelsEnum.Unknown]: 0, }; diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/page_title/index.tsx b/x-pack/plugins/security_solution/public/attack_discovery/pages/page_title/index.tsx index 998df2ad24f88..f5bab1cbdf87a 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/page_title/index.tsx +++ b/x-pack/plugins/security_solution/public/attack_discovery/pages/page_title/index.tsx @@ -22,15 +22,24 @@ const PageTitleComponent: React.FC = () => { - + diff --git a/x-pack/plugins/security_solution/public/attack_discovery/pages/page_title/translations.ts b/x-pack/plugins/security_solution/public/attack_discovery/pages/page_title/translations.ts index a0cd457f89070..20aac5efbef80 100644 --- a/x-pack/plugins/security_solution/public/attack_discovery/pages/page_title/translations.ts +++ b/x-pack/plugins/security_solution/public/attack_discovery/pages/page_title/translations.ts @@ -17,7 +17,7 @@ export const ATTACK_DISCOVERY_PAGE_TITLE = i18n.translate( export const BETA = i18n.translate( 'xpack.securitySolution.attackDiscovery.pages.pageTitle.betaBadge', { - defaultMessage: 'Beta', + defaultMessage: 'Technical preview', } ); @@ -25,6 +25,6 @@ export const BETA_TOOLTIP = i18n.translate( 'xpack.securitySolution.attackDiscovery.pages.pageTitle.betaTooltip', { defaultMessage: - 'This functionality is in beta and is subject to change. Please use Attack Discovery with caution in production environments.', + 'This functionality is in technical preview and is subject to change. Please use Attack Discovery with caution in production environments.', } ); diff --git a/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/use_discover_in_timeline_actions.test.tsx b/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/use_discover_in_timeline_actions.test.tsx index 0be0e7a7b6f5b..6e9936b5f1b41 100644 --- a/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/use_discover_in_timeline_actions.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/discover_in_timeline/use_discover_in_timeline_actions.test.tsx @@ -159,7 +159,10 @@ describe('useDiscoverInTimelineActions', () => { grid: undefined, hideAggregatedPreview: undefined, hideChart: true, - index: 'the-data-view-id', + dataSource: { + type: 'dataView', + dataViewId: 'the-data-view-id', + }, interval: 'auto', query: customQuery, rowHeight: undefined, diff --git a/x-pack/plugins/security_solution/public/common/components/top_n/index.test.tsx b/x-pack/plugins/security_solution/public/common/components/top_n/index.test.tsx index 5e8936c1f8b44..6c45faf63e566 100644 --- a/x-pack/plugins/security_solution/public/common/components/top_n/index.test.tsx +++ b/x-pack/plugins/security_solution/public/common/components/top_n/index.test.tsx @@ -276,6 +276,12 @@ describe('StatefulTopN', () => { expect(props.to).toEqual('2020-07-08T08:20:18.966Z'); }); + + test(`provides 'applyGlobalQueriesAndFilters' = true`, () => { + const props = wrapper.find('[data-test-subj="top-n"]').first().props() as Props; + + expect(props.applyGlobalQueriesAndFilters).toEqual(true); + }); }); describe('rendering in a timeline context', () => { @@ -343,26 +349,38 @@ describe('StatefulTopN', () => { expect(props.to).toEqual('2020-04-15T03:46:09.047Z'); }); + + test(`provides 'applyGlobalQueriesAndFilters' = false`, () => { + const props = wrapper.find('[data-test-subj="top-n"]').first().props() as Props; + + expect(props.applyGlobalQueriesAndFilters).toEqual(false); + }); }); describe('rendering in alerts context', () => { - detectionAlertsTables.forEach((tableId) => { - test(`defaults to the 'Alert events' option when rendering in Alerts`, async () => { - const wrapper = mount( + describe.each(detectionAlertsTables)('tableId: %s', (tableId) => { + let wrapper: ReactWrapper; + beforeEach(() => { + wrapper = mount( - + ); + }); + afterEach(() => { + wrapper.unmount(); + }); + + test(`defaults to the 'Alert events' option when rendering in Alerts`, async () => { await waitFor(() => { const props = wrapper.find('[data-test-subj="top-n"]').first().props() as Props; expect(props.defaultView).toEqual('alert'); }); - wrapper.unmount(); + }); + + test(`provides 'applyGlobalQueriesAndFilters' = true`, () => { + const props = wrapper.find('[data-test-subj="top-n"]').first().props() as Props; + expect(props.applyGlobalQueriesAndFilters).toEqual(true); }); }); }); diff --git a/x-pack/plugins/security_solution/public/common/components/top_n/index.tsx b/x-pack/plugins/security_solution/public/common/components/top_n/index.tsx index b96110363a9c3..cdad88b247f2d 100644 --- a/x-pack/plugins/security_solution/public/common/components/top_n/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/top_n/index.tsx @@ -111,6 +111,7 @@ const StatefulTopNComponent: React.FC = ({ const { from, deleteQuery, setQuery, to } = useGlobalTime(); const options = getOptions(isActiveTimeline(scopeId ?? '') ? activeTimelineEventType : undefined); + const applyGlobalQueriesAndFilters = !isActiveTimeline(scopeId ?? ''); const combinedQueries = useMemo( () => @@ -158,7 +159,6 @@ const StatefulTopNComponent: React.FC = ({ options={options} paddingSize={paddingSize} query={isActiveTimeline(scopeId ?? '') ? EMPTY_QUERY : globalQuery} - showLegend={showLegend} setAbsoluteRangeDatePickerTarget={ isActiveTimeline(scopeId ?? '') ? InputsModelId.timeline : InputsModelId.global } @@ -167,6 +167,7 @@ const StatefulTopNComponent: React.FC = ({ to={isActiveTimeline(scopeId ?? '') ? activeTimelineTo : to} toggleTopN={toggleTopN} onFilterAdded={onFilterAdded} + applyGlobalQueriesAndFilters={applyGlobalQueriesAndFilters} /> ); }; diff --git a/x-pack/plugins/security_solution/public/common/components/top_n/top_n.tsx b/x-pack/plugins/security_solution/public/common/components/top_n/top_n.tsx index 3b0547507e43f..48386a71a07fc 100644 --- a/x-pack/plugins/security_solution/public/common/components/top_n/top_n.tsx +++ b/x-pack/plugins/security_solution/public/common/components/top_n/top_n.tsx @@ -15,7 +15,6 @@ import { EventsByDataset } from '../../../overview/components/events_by_dataset' import { SignalsByCategory } from '../../../overview/components/signals_by_category'; import type { InputsModelId } from '../../store/inputs/constants'; import type { TimelineEventsType } from '../../../../common/types/timeline'; -import { useSourcererDataView } from '../../containers/sourcerer'; import type { TopNOption } from './helpers'; import { getSourcererScopeName, removeIgnoredAlertFilters } from './helpers'; import * as i18n from './translations'; @@ -54,10 +53,10 @@ export interface Props extends Pick void; onFilterAdded?: () => void; // eslint-disable-line react/no-unused-prop-types + applyGlobalQueriesAndFilters?: boolean; } const TopNComponent: React.FC = ({ @@ -71,12 +70,12 @@ const TopNComponent: React.FC = ({ options, paddingSize, query, - showLegend, setAbsoluteRangeDatePickerTarget, setQuery, scopeId, to, toggleTopN, + applyGlobalQueriesAndFilters, }) => { const [view, setView] = useState(defaultView); const onViewSelected = useCallback( @@ -84,7 +83,6 @@ const TopNComponent: React.FC = ({ [setView] ); const sourcererScopeId = getSourcererScopeName({ scopeId, view }); - const { selectedPatterns, runtimeMappings } = useSourcererDataView(sourcererScopeId); useEffect(() => { setView(defaultView); @@ -121,21 +119,17 @@ const TopNComponent: React.FC = ({ from={from} headerChildren={headerChildren} indexPattern={indexPattern} - indexNames={selectedPatterns} - runtimeMappings={runtimeMappings} onlyField={field} paddingSize={paddingSize} query={query} queryType="topN" - showLegend={showLegend} - setAbsoluteRangeDatePickerTarget={setAbsoluteRangeDatePickerTarget} setQuery={setQuery} showSpacer={false} toggleTopN={toggleTopN} - scopeId={scopeId} sourcererScopeId={sourcererScopeId} to={to} hideQueryToggle + applyGlobalQueriesAndFilters={applyGlobalQueriesAndFilters} /> ) : ( { params, }: { signal?: AbortSignal; - params: RiskScorePreviewRequestSchema; + params: RiskScoresPreviewRequest; }) => - http.fetch(RISK_SCORE_PREVIEW_URL, { + http.fetch(RISK_SCORE_PREVIEW_URL, { version: '1', method: 'POST', body: JSON.stringify(params), @@ -69,7 +70,7 @@ export const useEntityAnalyticsRoutes = () => { * Fetches risks engine status */ const fetchRiskEngineStatus = ({ signal }: { signal?: AbortSignal }) => - http.fetch(RISK_ENGINE_STATUS_URL, { + http.fetch(RISK_ENGINE_STATUS_URL, { version: '1', method: 'GET', signal, @@ -79,7 +80,7 @@ export const useEntityAnalyticsRoutes = () => { * Init risk score engine */ const initRiskEngine = () => - http.fetch(RISK_ENGINE_INIT_URL, { + http.fetch(RISK_ENGINE_INIT_URL, { version: '1', method: 'POST', }); @@ -88,7 +89,7 @@ export const useEntityAnalyticsRoutes = () => { * Enable risk score engine */ const enableRiskEngine = () => - http.fetch(RISK_ENGINE_ENABLE_URL, { + http.fetch(RISK_ENGINE_ENABLE_URL, { version: '1', method: 'POST', }); @@ -97,7 +98,7 @@ export const useEntityAnalyticsRoutes = () => { * Disable risk score engine */ const disableRiskEngine = () => - http.fetch(RISK_ENGINE_DISABLE_URL, { + http.fetch(RISK_ENGINE_DISABLE_URL, { version: '1', method: 'POST', }); diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.test.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.test.ts index 106fb9404372d..d54663c74cda8 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.test.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.test.ts @@ -9,14 +9,14 @@ import { act, renderHook } from '@testing-library/react-hooks'; import { TestProviders } from '../../../common/mock'; import { RiskScoreEntity } from '../../../../common/search_strategy'; import { useCalculateEntityRiskScore } from './use_calculate_entity_risk_score'; -import { RiskEngineStatus } from '../../../../common/entity_analytics/risk_engine'; import { waitFor } from '@testing-library/react'; +import { RiskEngineStatusEnum } from '../../../../common/api/entity_analytics/risk_engine/engine_status_route.gen'; const enabledRiskEngineStatus = { - risk_engine_status: RiskEngineStatus.ENABLED, + risk_engine_status: RiskEngineStatusEnum.ENABLED, }; const disabledRiskEngineStatus = { - risk_engine_status: RiskEngineStatus.DISABLED, + risk_engine_status: RiskEngineStatusEnum.DISABLED, }; const mockUseRiskEngineStatus = jest.fn(); diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.ts index ff1eb5c46a702..d836c71b141ad 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_calculate_entity_risk_score.ts @@ -9,10 +9,11 @@ import { useCallback } from 'react'; import { i18n } from '@kbn/i18n'; import { useMutation } from '@tanstack/react-query'; +import { RiskEngineStatusEnum } from '../../../../common/api/entity_analytics/risk_engine/engine_status_route.gen'; import { useEntityAnalyticsRoutes } from '../api'; import { useAppToasts } from '../../../common/hooks/use_app_toasts'; import { useRiskEngineStatus } from './use_risk_engine_status'; -import { RiskScoreEntity, RiskEngineStatus } from '../../../../common/entity_analytics/risk_engine'; +import { RiskScoreEntity } from '../../../../common/entity_analytics/risk_engine'; export const useCalculateEntityRiskScore = ( identifierType: RiskScoreEntity, @@ -41,7 +42,7 @@ export const useCalculateEntityRiskScore = ( }); const calculateEntityRiskScoreCb = useCallback(async () => { - if (riskEngineStatus?.risk_engine_status === RiskEngineStatus.ENABLED) { + if (riskEngineStatus?.risk_engine_status === RiskEngineStatusEnum.ENABLED) { mutate({ identifier_type: identifierType, identifier, diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_disable_risk_engine_mutation.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_disable_risk_engine_mutation.ts index 9f601d191d440..e19cf94fc379f 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_disable_risk_engine_mutation.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_disable_risk_engine_mutation.ts @@ -6,12 +6,13 @@ */ import type { UseMutationOptions } from '@tanstack/react-query'; import { useMutation } from '@tanstack/react-query'; +import type { TaskManagerUnavailableResponse } from '../../../../common/api/entity_analytics/common'; +import type { + RiskEngineDisableErrorResponse, + RiskEngineDisableResponse, +} from '../../../../common/api/entity_analytics/risk_engine/engine_disable_route.gen'; import { useEntityAnalyticsRoutes } from '../api'; import { useInvalidateRiskEngineStatusQuery } from './use_risk_engine_status'; -import type { - EnableRiskEngineResponse, - EnableDisableRiskEngineErrorResponse, -} from '../../../../server/lib/entity_analytics/types'; export const DISABLE_RISK_ENGINE_MUTATION_KEY = ['POST', 'DISABLE_RISK_ENGINE']; @@ -19,18 +20,18 @@ export const useDisableRiskEngineMutation = (options?: UseMutationOptions<{}>) = const invalidateRiskEngineStatusQuery = useInvalidateRiskEngineStatusQuery(); const { disableRiskEngine } = useEntityAnalyticsRoutes(); - return useMutation( - () => disableRiskEngine(), - { - ...options, - mutationKey: DISABLE_RISK_ENGINE_MUTATION_KEY, - onSettled: (...args) => { - invalidateRiskEngineStatusQuery(); + return useMutation< + RiskEngineDisableResponse, + { body: RiskEngineDisableErrorResponse | TaskManagerUnavailableResponse } + >(() => disableRiskEngine(), { + ...options, + mutationKey: DISABLE_RISK_ENGINE_MUTATION_KEY, + onSettled: (...args) => { + invalidateRiskEngineStatusQuery(); - if (options?.onSettled) { - options.onSettled(...args); - } - }, - } - ); + if (options?.onSettled) { + options.onSettled(...args); + } + }, + }); }; diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_enable_risk_engine_mutation.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_enable_risk_engine_mutation.ts index 0f1a5995b7656..658c4a5cdb185 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_enable_risk_engine_mutation.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_enable_risk_engine_mutation.ts @@ -6,29 +6,30 @@ */ import type { UseMutationOptions } from '@tanstack/react-query'; import { useMutation } from '@tanstack/react-query'; +import type { TaskManagerUnavailableResponse } from '../../../../common/api/entity_analytics/common'; +import type { + RiskEngineEnableErrorResponse, + RiskEngineEnableResponse, +} from '../../../../common/api/entity_analytics/risk_engine/engine_enable_route.gen'; import { useEntityAnalyticsRoutes } from '../api'; import { useInvalidateRiskEngineStatusQuery } from './use_risk_engine_status'; -import type { - EnableRiskEngineResponse, - EnableDisableRiskEngineErrorResponse, -} from '../../../../server/lib/entity_analytics/types'; export const ENABLE_RISK_ENGINE_MUTATION_KEY = ['POST', 'ENABLE_RISK_ENGINE']; export const useEnableRiskEngineMutation = (options?: UseMutationOptions<{}>) => { const invalidateRiskEngineStatusQuery = useInvalidateRiskEngineStatusQuery(); const { enableRiskEngine } = useEntityAnalyticsRoutes(); - return useMutation( - enableRiskEngine, - { - ...options, - mutationKey: ENABLE_RISK_ENGINE_MUTATION_KEY, - onSettled: (...args) => { - invalidateRiskEngineStatusQuery(); + return useMutation< + RiskEngineEnableResponse, + { body: RiskEngineEnableErrorResponse | TaskManagerUnavailableResponse } + >(enableRiskEngine, { + ...options, + mutationKey: ENABLE_RISK_ENGINE_MUTATION_KEY, + onSettled: (...args) => { + invalidateRiskEngineStatusQuery(); - if (options?.onSettled) { - options.onSettled(...args); - } - }, - } - ); + if (options?.onSettled) { + options.onSettled(...args); + } + }, + }); }; diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_init_risk_engine_mutation.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_init_risk_engine_mutation.ts index aa8a19c4a7a6a..67d94257e9165 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_init_risk_engine_mutation.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_init_risk_engine_mutation.ts @@ -6,19 +6,24 @@ */ import type { UseMutationOptions } from '@tanstack/react-query'; import { useMutation } from '@tanstack/react-query'; +import type { TaskManagerUnavailableResponse } from '../../../../common/api/entity_analytics/common'; +import type { + RiskEngineInitErrorResponse, + RiskEngineInitResponse, +} from '../../../../common/api/entity_analytics/risk_engine/engine_init_route.gen'; import { useEntityAnalyticsRoutes } from '../api'; import { useInvalidateRiskEngineStatusQuery } from './use_risk_engine_status'; -import type { - InitRiskEngineResponse, - InitRiskEngineError, -} from '../../../../server/lib/entity_analytics/types'; export const INIT_RISK_ENGINE_STATUS_KEY = ['POST', 'INIT_RISK_ENGINE']; export const useInitRiskEngineMutation = (options?: UseMutationOptions<{}>) => { const invalidateRiskEngineStatusQuery = useInvalidateRiskEngineStatusQuery(); const { initRiskEngine } = useEntityAnalyticsRoutes(); - return useMutation(() => initRiskEngine(), { + + return useMutation< + RiskEngineInitResponse, + { body: RiskEngineInitErrorResponse | TaskManagerUnavailableResponse } + >(() => initRiskEngine(), { ...options, mutationKey: INIT_RISK_ENGINE_STATUS_KEY, onSettled: (...args) => { diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_preview_risk_scores.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_preview_risk_scores.ts index 01e9c6ac8dfea..837358aa96170 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_preview_risk_scores.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_preview_risk_scores.ts @@ -6,18 +6,18 @@ */ import { useQuery } from '@tanstack/react-query'; import dateMath from '@kbn/datemath'; +import type { RiskScoresPreviewRequest } from '../../../../common/api/entity_analytics/risk_engine/preview_route.gen'; import { useEntityAnalyticsRoutes } from '../api'; -import type { RiskScorePreviewRequestSchema } from '../../../../common/entity_analytics/risk_engine/risk_score_preview/request_schema'; export const useRiskScorePreview = ({ data_view_id: dataViewId, range, filter, -}: RiskScorePreviewRequestSchema) => { +}: RiskScoresPreviewRequest) => { const { fetchRiskScorePreview } = useEntityAnalyticsRoutes(); return useQuery(['POST', 'FETCH_PREVIEW_RISK_SCORE', range, filter], async ({ signal }) => { - const params: RiskScorePreviewRequestSchema = { data_view_id: dataViewId }; + const params: RiskScoresPreviewRequest = { data_view_id: dataViewId }; if (range) { const startTime = dateMath.parse(range.start)?.utc().toISOString(); const endTime = dateMath diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_risk_engine_status.ts b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_risk_engine_status.ts index bedd09c21f0f5..8b88a3a0148f2 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_risk_engine_status.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_risk_engine_status.ts @@ -6,8 +6,8 @@ */ import { useQuery, useQueryClient } from '@tanstack/react-query'; import { useCallback } from 'react'; +import { RiskEngineStatusEnum } from '../../../../common/api/entity_analytics/risk_engine/engine_status_route.gen'; import { useEntityAnalyticsRoutes } from '../api'; -import { RiskEngineStatus } from '../../../../common/entity_analytics/risk_engine/types'; import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features'; const FETCH_RISK_ENGINE_STATUS = ['GET', 'FETCH_RISK_ENGINE_STATUS']; @@ -52,10 +52,10 @@ export const useRiskEngineStatus = () => { } const response = await fetchRiskEngineStatus({ signal }); const isUpdateAvailable = - response?.legacy_risk_engine_status === RiskEngineStatus.ENABLED && - response.risk_engine_status === RiskEngineStatus.NOT_INSTALLED; + response?.legacy_risk_engine_status === RiskEngineStatusEnum.ENABLED && + response.risk_engine_status === RiskEngineStatusEnum.NOT_INSTALLED; const isNewRiskScoreModuleInstalled = - response.risk_engine_status !== RiskEngineStatus.NOT_INSTALLED; + response.risk_engine_status !== RiskEngineStatusEnum.NOT_INSTALLED; return { isUpdateAvailable, isNewRiskScoreModuleInstalled, diff --git a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_risk_score_kpi.tsx b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_risk_score_kpi.tsx index 029b20e121d9e..c25c2d126456d 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_risk_score_kpi.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/api/hooks/use_risk_score_kpi.tsx @@ -140,11 +140,11 @@ export const useRiskScoreKpi = ({ } return { - [RiskSeverity.unknown]: result.kpiRiskScore[RiskSeverity.unknown] ?? 0, - [RiskSeverity.low]: result.kpiRiskScore[RiskSeverity.low] ?? 0, - [RiskSeverity.moderate]: result.kpiRiskScore[RiskSeverity.moderate] ?? 0, - [RiskSeverity.high]: result.kpiRiskScore[RiskSeverity.high] ?? 0, - [RiskSeverity.critical]: result.kpiRiskScore[RiskSeverity.critical] ?? 0, + [RiskSeverity.Unknown]: result.kpiRiskScore[RiskSeverity.Unknown] ?? 0, + [RiskSeverity.Low]: result.kpiRiskScore[RiskSeverity.Low] ?? 0, + [RiskSeverity.Moderate]: result.kpiRiskScore[RiskSeverity.Moderate] ?? 0, + [RiskSeverity.High]: result.kpiRiskScore[RiskSeverity.High] ?? 0, + [RiskSeverity.Critical]: result.kpiRiskScore[RiskSeverity.Critical] ?? 0, }; }, [result, loading, error]); diff --git a/x-pack/plugins/security_solution/public/entity_analytics/common/utils.ts b/x-pack/plugins/security_solution/public/entity_analytics/common/utils.ts index 3756780e18ae6..f3097fe46b9bb 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/common/utils.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/common/utils.ts @@ -11,19 +11,19 @@ import { SEVERITY_COLOR } from '../../overview/components/detection_response/uti export { RISK_LEVEL_RANGES as RISK_SCORE_RANGES } from '../../../common/entity_analytics/risk_engine'; export const SEVERITY_UI_SORT_ORDER = [ - RiskSeverity.unknown, - RiskSeverity.low, - RiskSeverity.moderate, - RiskSeverity.high, - RiskSeverity.critical, + RiskSeverity.Unknown, + RiskSeverity.Low, + RiskSeverity.Moderate, + RiskSeverity.High, + RiskSeverity.Critical, ]; export const RISK_SEVERITY_COLOUR: { [k in RiskSeverity]: string } = { - [RiskSeverity.unknown]: euiLightVars.euiColorMediumShade, - [RiskSeverity.low]: SEVERITY_COLOR.low, - [RiskSeverity.moderate]: SEVERITY_COLOR.medium, - [RiskSeverity.high]: SEVERITY_COLOR.high, - [RiskSeverity.critical]: SEVERITY_COLOR.critical, + [RiskSeverity.Unknown]: euiLightVars.euiColorMediumShade, + [RiskSeverity.Low]: SEVERITY_COLOR.low, + [RiskSeverity.Moderate]: SEVERITY_COLOR.medium, + [RiskSeverity.High]: SEVERITY_COLOR.high, + [RiskSeverity.Critical]: SEVERITY_COLOR.critical, }; type SnakeToCamelCaseString = S extends `${infer T}_${infer U}` diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/asset_criticality/use_asset_criticality.ts b/x-pack/plugins/security_solution/public/entity_analytics/components/asset_criticality/use_asset_criticality.ts index c56b394236326..9bd67dfed731e 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/asset_criticality/use_asset_criticality.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/asset_criticality/use_asset_criticality.ts @@ -9,11 +9,11 @@ import type { UseMutationResult, UseQueryResult } from '@tanstack/react-query'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { useUiSetting$ } from '@kbn/kibana-react-plugin/public'; import type { SecurityAppError } from '@kbn/securitysolution-t-grid'; +import type { EntityAnalyticsPrivileges } from '../../../../common/api/entity_analytics'; import type { CriticalityLevelWithUnassigned } from '../../../../common/entity_analytics/asset_criticality/types'; import { ENABLE_ASSET_CRITICALITY_SETTING } from '../../../../common/constants'; import { useHasSecurityCapability } from '../../../helper_hooks'; import type { AssetCriticalityRecord } from '../../../../common/api/entity_analytics/asset_criticality'; -import type { EntityAnalyticsPrivileges } from '../../../../common/api/entity_analytics/common'; import type { AssetCriticality, DeleteAssetCriticalityResponse } from '../../api/api'; import { useEntityAnalyticsRoutes } from '../../api/api'; diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_header/index.test.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_header/index.test.tsx index 392656402c63e..4a6d532d272c5 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_header/index.test.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_header/index.test.tsx @@ -18,11 +18,11 @@ import { UsersTableType } from '../../../explore/users/store/model'; import type { SeverityCount } from '../severity/types'; const mockSeverityCount: SeverityCount = { - [RiskSeverity.low]: 1, - [RiskSeverity.high]: 1, - [RiskSeverity.moderate]: 1, - [RiskSeverity.unknown]: 1, - [RiskSeverity.critical]: 99, + [RiskSeverity.Low]: 1, + [RiskSeverity.High]: 1, + [RiskSeverity.Moderate]: 1, + [RiskSeverity.Unknown]: 1, + [RiskSeverity.Critical]: 99, }; jest.mock('../../../common/components/ml/hooks/use_ml_capabilities', () => ({ @@ -82,7 +82,7 @@ describe('Entity analytics header', () => { await waitFor(() => { expect(mockDispatch).toHaveBeenCalledWith( usersActions.updateUserRiskScoreSeverityFilter({ - severitySelection: [RiskSeverity.critical], + severitySelection: [RiskSeverity.Critical], }) ); @@ -109,7 +109,7 @@ describe('Entity analytics header', () => { await waitFor(() => { expect(mockDispatch).toHaveBeenCalledWith( hostsActions.updateHostRiskScoreSeverityFilter({ - severitySelection: [RiskSeverity.critical], + severitySelection: [RiskSeverity.Critical], hostsType: HostsType.page, }) ); diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_header/index.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_header/index.tsx index 8a814a1ee5a2e..1b880f6247820 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_header/index.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_header/index.tsx @@ -88,7 +88,7 @@ export const EntityAnalyticsHeader = () => { onClick: () => { dispatch( hostsActions.updateHostRiskScoreSeverityFilter({ - severitySelection: [RiskSeverity.critical], + severitySelection: [RiskSeverity.Critical], hostsType: HostsType.page, }) ); @@ -111,7 +111,7 @@ export const EntityAnalyticsHeader = () => { onClick: () => { dispatch( usersActions.updateUserRiskScoreSeverityFilter({ - severitySelection: [RiskSeverity.critical], + severitySelection: [RiskSeverity.Critical], }) ); @@ -179,7 +179,7 @@ export const EntityAnalyticsHeader = () => { {hostsSeverityCount ? ( - + ) : ( '-' )} @@ -205,7 +205,7 @@ export const EntityAnalyticsHeader = () => { {usersSeverityCount ? ( - + ) : ( '-' )} diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_risk_score/__mocks__/index.ts b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_risk_score/__mocks__/index.ts index 19f3a03e41c03..a4a8134f8480f 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_risk_score/__mocks__/index.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_risk_score/__mocks__/index.ts @@ -8,9 +8,9 @@ import { RiskSeverity } from '../../../../../common/search_strategy/security_solution'; export const mockSeverityCount = { - [RiskSeverity.unknown]: 1, - [RiskSeverity.low]: 2, - [RiskSeverity.moderate]: 3, - [RiskSeverity.high]: 4, - [RiskSeverity.critical]: 5, + [RiskSeverity.Unknown]: 1, + [RiskSeverity.Low]: 2, + [RiskSeverity.Moderate]: 3, + [RiskSeverity.High]: 4, + [RiskSeverity.Critical]: 5, }; diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_risk_score/chart_content.test.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_risk_score/chart_content.test.tsx index e346e999f8bd1..ac9a224ffe60a 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_risk_score/chart_content.test.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_risk_score/chart_content.test.tsx @@ -30,7 +30,7 @@ describe('ChartContent', () => { riskEntity: RiskScoreEntity.host, severityCount: undefined, timerange: { from: '2022-04-05T12:00:00.000Z', to: '2022-04-08T12:00:00.000Z' }, - selectedSeverity: [RiskSeverity.unknown], + selectedSeverity: [RiskSeverity.Unknown], }; beforeEach(() => { jest.clearAllMocks(); diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_risk_score/index.test.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_risk_score/index.test.tsx index 057e250e339d6..7de22b5a529b0 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_risk_score/index.test.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_analytics_risk_score/index.test.tsx @@ -34,11 +34,11 @@ jest.mock('../../../common/lib/kibana', () => { }); const mockSeverityCount: SeverityCount = { - [RiskSeverity.low]: 1, - [RiskSeverity.high]: 1, - [RiskSeverity.moderate]: 1, - [RiskSeverity.unknown]: 1, - [RiskSeverity.critical]: 1, + [RiskSeverity.Low]: 1, + [RiskSeverity.High]: 1, + [RiskSeverity.Moderate]: 1, + [RiskSeverity.Unknown]: 1, + [RiskSeverity.Critical]: 1, }; const mockUseQueryToggle = jest @@ -168,7 +168,7 @@ describe.each([RiskScoreEntity.host, RiskScoreEntity.user])( name: 'testUsername', risk: { rule_risks: [], - calculated_level: RiskSeverity.high, + calculated_level: RiskSeverity.High, calculated_score_norm: 75, multipliers: [], }, @@ -203,7 +203,7 @@ describe.each([RiskScoreEntity.host, RiskScoreEntity.user])( name, risk: { rule_risks: [], - calculated_level: RiskSeverity.high, + calculated_level: RiskSeverity.High, calculated_score_norm: 75, multipliers: [], }, @@ -246,7 +246,7 @@ describe.each([RiskScoreEntity.host, RiskScoreEntity.user])( name, risk: { rule_risks: [], - calculated_level: RiskSeverity.high, + calculated_level: RiskSeverity.High, calculated_score_norm: 75, multipliers: [], }, diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_details_flyout/tabs/risk_inputs/risk_inputs.test.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_details_flyout/tabs/risk_inputs/risk_inputs.test.tsx index 6b632a8269365..8524a2a6a26ea 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/entity_details_flyout/tabs/risk_inputs/risk_inputs.test.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/entity_details_flyout/tabs/risk_inputs/risk_inputs.test.tsx @@ -44,7 +44,7 @@ const riskScore = { rule_risks: [], calculated_score_norm: 100, multipliers: [], - calculated_level: RiskSeverity.critical, + calculated_level: RiskSeverity.Critical, }, }, }; diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_information/index.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_information/index.tsx index e0880bf563218..8596c7869edcb 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_information/index.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_information/index.tsx @@ -69,11 +69,11 @@ const getRiskLevelTableColumns = (): Array { diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_donut_chart/use_risk_donut_chart_data.test.ts b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_donut_chart/use_risk_donut_chart_data.test.ts index 933a9f98b5bea..376417bb9f4dd 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_donut_chart/use_risk_donut_chart_data.test.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_donut_chart/use_risk_donut_chart_data.test.ts @@ -13,11 +13,11 @@ import type { SeverityCount } from '../severity/types'; describe('useRiskDonutChartData', () => { it('returns the total', () => { const severityCount: SeverityCount = { - [RiskSeverity.low]: 1, - [RiskSeverity.high]: 2, - [RiskSeverity.moderate]: 3, - [RiskSeverity.unknown]: 4, - [RiskSeverity.critical]: 5, + [RiskSeverity.Low]: 1, + [RiskSeverity.High]: 2, + [RiskSeverity.Moderate]: 3, + [RiskSeverity.Unknown]: 4, + [RiskSeverity.Critical]: 5, }; const { result } = renderHook(() => useRiskDonutChartData(severityCount)); @@ -29,11 +29,11 @@ describe('useRiskDonutChartData', () => { it('returns all legends', () => { const severityCount: SeverityCount = { - [RiskSeverity.low]: 1, - [RiskSeverity.high]: 1, - [RiskSeverity.moderate]: 1, - [RiskSeverity.unknown]: 1, - [RiskSeverity.critical]: 1, + [RiskSeverity.Low]: 1, + [RiskSeverity.High]: 1, + [RiskSeverity.Moderate]: 1, + [RiskSeverity.Unknown]: 1, + [RiskSeverity.Critical]: 1, }; const { result } = renderHook(() => useRiskDonutChartData(severityCount)); diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_enable_section.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_enable_section.tsx index 1a05128de67ca..b5faebe500dac 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_enable_section.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_enable_section.tsx @@ -30,12 +30,14 @@ import { } from '@elastic/eui'; import { LinkAnchor } from '@kbn/security-solution-navigation/links'; import { SecurityPageName } from '@kbn/security-solution-navigation'; +import type { RiskEngineStatus } from '../../../common/api/entity_analytics/risk_engine/engine_status_route.gen'; +import { RiskEngineStatusEnum } from '../../../common/api/entity_analytics/risk_engine/engine_status_route.gen'; import * as i18n from '../translations'; import { useRiskEngineStatus } from '../api/hooks/use_risk_engine_status'; import { useInitRiskEngineMutation } from '../api/hooks/use_init_risk_engine_mutation'; import { useEnableRiskEngineMutation } from '../api/hooks/use_enable_risk_engine_mutation'; import { useDisableRiskEngineMutation } from '../api/hooks/use_disable_risk_engine_mutation'; -import { RiskEngineStatus, MAX_SPACES_COUNT } from '../../../common/entity_analytics/risk_engine'; +import { MAX_SPACES_COUNT } from '../../../common/entity_analytics/risk_engine'; import { useAppToasts } from '../../common/hooks/use_app_toasts'; import { RiskInformationFlyout } from './risk_information'; import { useOnOpenCloseHandler } from '../../helper_hooks'; @@ -145,7 +147,7 @@ const RiskEngineHealth: React.FC<{ currentRiskEngineStatus?: RiskEngineStatus | if (!currentRiskEngineStatus) { return {'-'}; } - if (currentRiskEngineStatus === RiskEngineStatus.ENABLED) { + if (currentRiskEngineStatus === RiskEngineStatusEnum.ENABLED) { return {i18n.RISK_SCORE_MODULE_STATUS_ON}; } return {i18n.RISK_SCORE_MODULE_STATUS_OFF}; @@ -178,7 +180,7 @@ const RiskEngineStatusRow: React.FC<{ +const getRiskiestScores = (scores: EntityRiskScoreRecord[] = [], field: string) => scores ?.filter((item) => item?.id_field === field) ?.sort((a, b) => b?.calculated_score_norm - a?.calculated_score_norm) diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_preview_table.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_preview_table.tsx index db03ddde63761..febce7d9c23ce 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_preview_table.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_score_preview_table.tsx @@ -9,24 +9,22 @@ import React from 'react'; import { EuiInMemoryTable } from '@elastic/eui'; import type { EuiBasicTableColumn } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; +import type { EntityRiskScoreRecord } from '../../../common/api/entity_analytics/common'; import type { RiskSeverity } from '../../../common/search_strategy'; import { RiskScoreLevel } from './severity/common'; import { HostDetailsLink, UserDetailsLink } from '../../common/components/links'; -import { - RiskScoreEntity, - type RiskScore as IRiskScore, -} from '../../../common/entity_analytics/risk_engine'; +import { RiskScoreEntity } from '../../../common/entity_analytics/risk_engine'; -type RiskScoreColumn = EuiBasicTableColumn & { - field: keyof IRiskScore; +type RiskScoreColumn = EuiBasicTableColumn & { + field: keyof EntityRiskScoreRecord; }; export const RiskScorePreviewTable = ({ items, type, }: { - items: IRiskScore[]; + items: EntityRiskScoreRecord[]; type: RiskScoreEntity; }) => { const columns: RiskScoreColumn[] = [ @@ -81,7 +79,7 @@ export const RiskScorePreviewTable = ({ ]; return ( - + data-test-subj={ type === RiskScoreEntity.host ? 'host-risk-preview-table' : 'user-risk-preview-table' } diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary.test.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary.test.tsx index 9bb495118385f..75722d781bbc7 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary.test.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/risk_summary.test.tsx @@ -19,7 +19,7 @@ describe.each([RiskScoreEntity.host, RiskScoreEntity.user])( 'RiskSummary entityType: %s', (riskEntity) => { it(`renders ${riskEntity} risk data`, () => { - const riskSeverity = RiskSeverity.low; + const riskSeverity = RiskSeverity.Low; const risk = { loading: false, isModuleEnabled: true, diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/severity/common/index.test.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/severity/common/index.test.tsx index c9b75129bb0a2..245def2be69f6 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/severity/common/index.test.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/severity/common/index.test.tsx @@ -31,11 +31,11 @@ describe('RiskScore', () => { it('renders critical severity risk score', () => { const { container } = render( - + ); - expect(container).toHaveTextContent(RiskSeverity.critical); + expect(container).toHaveTextContent(RiskSeverity.Critical); expect(EuiHealth as jest.Mock).toHaveBeenLastCalledWith( expect.objectContaining({ color: SEVERITY_COLOR.critical }), @@ -46,11 +46,11 @@ describe('RiskScore', () => { it('renders hight severity risk score', () => { const { container } = render( - + ); - expect(container).toHaveTextContent(RiskSeverity.high); + expect(container).toHaveTextContent(RiskSeverity.High); expect(EuiHealth as jest.Mock).toHaveBeenLastCalledWith( expect.objectContaining({ color: SEVERITY_COLOR.high }), @@ -61,11 +61,11 @@ describe('RiskScore', () => { it('renders moderate severity risk score', () => { const { container } = render( - + ); - expect(container).toHaveTextContent(RiskSeverity.moderate); + expect(container).toHaveTextContent(RiskSeverity.Moderate); expect(EuiHealth as jest.Mock).toHaveBeenLastCalledWith( expect.objectContaining({ color: SEVERITY_COLOR.medium }), @@ -76,11 +76,11 @@ describe('RiskScore', () => { it('renders low severity risk score', () => { const { container } = render( - + ); - expect(container).toHaveTextContent(RiskSeverity.low); + expect(container).toHaveTextContent(RiskSeverity.Low); expect(EuiHealth as jest.Mock).toHaveBeenLastCalledWith( expect.objectContaining({ color: SEVERITY_COLOR.low }), @@ -91,11 +91,11 @@ describe('RiskScore', () => { it('renders unknown severity risk score', () => { const { container } = render( - + ); - expect(container).toHaveTextContent(RiskSeverity.unknown); + expect(container).toHaveTextContent(RiskSeverity.Unknown); expect(EuiHealth as jest.Mock).toHaveBeenLastCalledWith( expect.objectContaining({ color: euiThemeVars.euiColorMediumShade }), @@ -106,7 +106,7 @@ describe('RiskScore', () => { it("doesn't render background-color when hideBackgroundColor is true", () => { const { queryByTestId } = render( - + ); diff --git a/x-pack/plugins/security_solution/public/entity_analytics/components/severity/severity_filter_group.test.tsx b/x-pack/plugins/security_solution/public/entity_analytics/components/severity/severity_filter_group.test.tsx index 053338c67de6f..0ea834a4bfc95 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/components/severity/severity_filter_group.test.tsx +++ b/x-pack/plugins/security_solution/public/entity_analytics/components/severity/severity_filter_group.test.tsx @@ -33,11 +33,11 @@ describe('SeverityFilterGroup', () => { { { { risk: { rule_risks: [], calculated_score_norm: 71, - calculated_level: RiskSeverity.high, + calculated_level: RiskSeverity.High, multipliers: [], '@timestamp': '', id_field: '', diff --git a/x-pack/plugins/security_solution/public/entity_analytics/hooks/use_risk_contributing_alerts.ts b/x-pack/plugins/security_solution/public/entity_analytics/hooks/use_risk_contributing_alerts.ts index 65743d468ed2a..3565843b120c0 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/hooks/use_risk_contributing_alerts.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/hooks/use_risk_contributing_alerts.ts @@ -7,8 +7,8 @@ import { useEffect } from 'react'; import type { ALERT_RULE_NAME, ALERT_RULE_UUID } from '@kbn/rule-data-utils'; -import type { EntityRiskInput } from '../../../common/entity_analytics/risk_engine'; +import type { RiskScoreInput } from '../../../common/api/entity_analytics/common'; import { useQueryAlerts } from '../../detections/containers/detection_engine/alerts/use_query'; import { ALERTS_QUERY_NAMES } from '../../detections/containers/detection_engine/alerts/constants'; @@ -35,7 +35,7 @@ interface AlertHit { export interface InputAlert { alert: AlertData; - input: EntityRiskInput; + input: RiskScoreInput; _id: string; } diff --git a/x-pack/plugins/security_solution/public/entity_analytics/lens_attributes/risk_score_summary.test.ts b/x-pack/plugins/security_solution/public/entity_analytics/lens_attributes/risk_score_summary.test.ts index 6ef0abbf77693..47f5ef4c2275a 100644 --- a/x-pack/plugins/security_solution/public/entity_analytics/lens_attributes/risk_score_summary.test.ts +++ b/x-pack/plugins/security_solution/public/entity_analytics/lens_attributes/risk_score_summary.test.ts @@ -31,7 +31,7 @@ describe('getRiskScoreSummaryAttributes', () => { () => useLensAttributes({ lensAttributes: getRiskScoreSummaryAttributes({ - severity: RiskSeverity.low, + severity: RiskSeverity.Low, query: `user.name: test.user`, spaceId: 'default', riskEntity: RiskScoreEntity.user, @@ -48,7 +48,7 @@ describe('getRiskScoreSummaryAttributes', () => { () => useLensAttributes({ lensAttributes: getRiskScoreSummaryAttributes({ - severity: RiskSeverity.low, + severity: RiskSeverity.Low, query: `user.name: test.user`, spaceId: 'default', riskEntity: RiskScoreEntity.user, @@ -67,7 +67,7 @@ describe('getRiskScoreSummaryAttributes', () => { () => useLensAttributes({ lensAttributes: getRiskScoreSummaryAttributes({ - severity: RiskSeverity.low, + severity: RiskSeverity.Low, query, spaceId: 'default', riskEntity: RiskScoreEntity.user, diff --git a/x-pack/plugins/security_solution/public/explore/users/components/all_users/index.test.tsx b/x-pack/plugins/security_solution/public/explore/users/components/all_users/index.test.tsx index 7a97cc3515d83..da54aa8aa05c8 100644 --- a/x-pack/plugins/security_solution/public/explore/users/components/all_users/index.test.tsx +++ b/x-pack/plugins/security_solution/public/explore/users/components/all_users/index.test.tsx @@ -89,7 +89,7 @@ describe('Users Table Component', () => { name: 'testUser', lastSeen: '2019-04-08T18:35:45.064Z', domain: 'test domain', - risk: RiskSeverity.critical, + risk: RiskSeverity.Critical, }, ]} fakeTotalCount={50} @@ -123,7 +123,7 @@ describe('Users Table Component', () => { name: 'testUser', lastSeen: '2019-04-08T18:35:45.064Z', domain: 'test domain', - risk: RiskSeverity.critical, + risk: RiskSeverity.Critical, }, ]} fakeTotalCount={50} diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.test.tsx index bc3105bedaba5..4efc33e4a1ecb 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/host_details.test.tsx @@ -120,7 +120,7 @@ const mockRiskScoreResponse = { const mockRelatedUsersResponse = { inspect: jest.fn(), refetch: jest.fn(), - relatedUsers: [{ user: 'test user', ip: ['100.XXX.XXX'], risk: RiskSeverity.low }], + relatedUsers: [{ user: 'test user', ip: ['100.XXX.XXX'], risk: RiskSeverity.Low }], loading: false, }; diff --git a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.test.tsx b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.test.tsx index 03102e00f753b..b8510c30c3299 100644 --- a/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/document_details/left/components/user_details.test.tsx @@ -117,7 +117,7 @@ const mockRiskScoreResponse = { const mockRelatedHostsResponse = { inspect: jest.fn(), refetch: jest.fn(), - relatedHosts: [{ host: 'test host', ip: ['100.XXX.XXX'], risk: RiskSeverity.low }], + relatedHosts: [{ host: 'test host', ip: ['100.XXX.XXX'], risk: RiskSeverity.Low }], loading: false, }; diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/host_details_left/index.test.tsx b/x-pack/plugins/security_solution/public/flyout/entity_details/host_details_left/index.test.tsx index 68c2b4868a312..fdda420616cc6 100644 --- a/x-pack/plugins/security_solution/public/flyout/entity_details/host_details_left/index.test.tsx +++ b/x-pack/plugins/security_solution/public/flyout/entity_details/host_details_left/index.test.tsx @@ -27,7 +27,7 @@ const riskScore: HostRiskScore = { category_1_score: 150, category_1_count: 1, multipliers: [], - calculated_level: RiskSeverity.critical, + calculated_level: RiskSeverity.Critical, inputs: [], notes: [], }, diff --git a/x-pack/plugins/security_solution/public/flyout/entity_details/mocks/index.ts b/x-pack/plugins/security_solution/public/flyout/entity_details/mocks/index.ts index 3ebd80489630d..96543a7fba5b6 100644 --- a/x-pack/plugins/security_solution/public/flyout/entity_details/mocks/index.ts +++ b/x-pack/plugins/security_solution/public/flyout/entity_details/mocks/index.ts @@ -26,7 +26,7 @@ const userRiskScore: UserRiskScore = { rule_risks: [], calculated_score_norm: 70, multipliers: [], - calculated_level: RiskSeverity.high, + calculated_level: RiskSeverity.High, '@timestamp': '', id_field: '', id_value: '', @@ -60,7 +60,7 @@ const hostRiskScore: HostRiskScore = { rule_risks: [], calculated_score_norm: 70, multipliers: [], - calculated_level: RiskSeverity.high, + calculated_level: RiskSeverity.High, '@timestamp': '', id_field: '', id_value: '', diff --git a/x-pack/plugins/security_solution/public/overview/components/events_by_dataset/index.tsx b/x-pack/plugins/security_solution/public/overview/components/events_by_dataset/index.tsx index 3f7e72b15163b..006ba6e4a476a 100644 --- a/x-pack/plugins/security_solution/public/overview/components/events_by_dataset/index.tsx +++ b/x-pack/plugins/security_solution/public/overview/components/events_by_dataset/index.tsx @@ -7,7 +7,6 @@ import { Position } from '@elastic/charts'; import numeral from '@elastic/numeral'; -import type { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/typesWithBodyKey'; import React, { useEffect, useMemo, useCallback } from 'react'; import type { DataViewBase, Filter, Query } from '@kbn/es-query'; @@ -29,7 +28,6 @@ import { eventsHistogramConfig, } from '../../../common/components/events_tab/histogram_configurations'; import { HostsTableType } from '../../../explore/hosts/store/model'; -import type { InputsModelId } from '../../../common/store/inputs/constants'; import type { GlobalTimeArgs } from '../../../common/containers/use_global_time'; import * as i18n from '../../pages/translations'; @@ -48,20 +46,16 @@ interface Props extends Pick void; hideQueryToggle?: boolean; sourcererScopeId?: SourcererScopeName; + applyGlobalQueriesAndFilters?: boolean; } const getHistogramOption = (fieldName: string): MatrixHistogramOption => ({ @@ -83,21 +77,17 @@ const EventsByDatasetComponent: React.FC = ({ from, headerChildren, indexPattern, - indexNames, - runtimeMappings, onlyField, paddingSize, query, queryType, - setAbsoluteRangeDatePickerTarget, setQuery, - showLegend, showSpacer = true, - scopeId, sourcererScopeId, to, toggleTopN, hideQueryToggle = false, + applyGlobalQueriesAndFilters, }) => { const uniqueQueryId = useMemo(() => `${ID}-${queryType}`, [queryType]); @@ -204,6 +194,7 @@ const EventsByDatasetComponent: React.FC = ({ title={onlyField != null ? i18n.TOP(onlyField) : eventsByDatasetHistogramConfigs.title} chartHeight={CHART_HEIGHT} hideQueryToggle={hideQueryToggle} + applyGlobalQueriesAndFilters={applyGlobalQueriesAndFilters} /> ); }; diff --git a/x-pack/plugins/security_solution/public/overview/pages/overview.tsx b/x-pack/plugins/security_solution/public/overview/pages/overview.tsx index a9cd12cd642ae..d4daf475fb660 100644 --- a/x-pack/plugins/security_solution/public/overview/pages/overview.tsx +++ b/x-pack/plugins/security_solution/public/overview/pages/overview.tsx @@ -115,7 +115,6 @@ const OverviewComponent = () => { filters={filters} from={from} indexPattern={indexPattern} - indexNames={selectedPatterns} query={query} queryType="overview" setQuery={setQuery} diff --git a/x-pack/plugins/security_solution/public/timelines/components/side_panel/new_user_detail/__mocks__/index.ts b/x-pack/plugins/security_solution/public/timelines/components/side_panel/new_user_detail/__mocks__/index.ts index da5f0f4c6440e..d14f9024d64a5 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/side_panel/new_user_detail/__mocks__/index.ts +++ b/x-pack/plugins/security_solution/public/timelines/components/side_panel/new_user_detail/__mocks__/index.ts @@ -21,7 +21,7 @@ const userRiskScore = { rule_risks: [], calculated_score_norm: 70, multipliers: [], - calculated_level: RiskSeverity.high, + calculated_level: RiskSeverity.High, }, }, alertsCount: 0, diff --git a/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/attack_discovery_tool.ts b/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/attack_discovery_tool.ts index 0d321e7402400..264862d76b8f5 100644 --- a/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/attack_discovery_tool.ts +++ b/x-pack/plugins/security_solution/server/assistant/tools/attack_discovery/attack_discovery_tool.ts @@ -53,6 +53,7 @@ export const ATTACK_DISCOVERY_TOOL: AssistantTool = { alertsIndexPattern, anonymizationFields, esClient, + langChainTimeout, llm, onNewReplacements, replacements, @@ -102,6 +103,7 @@ export const ATTACK_DISCOVERY_TOOL: AssistantTool = { const result = await answerFormattingChain.call({ query: getAttackDiscoveryPrompt({ anonymizedAlerts }), + timeout: langChainTimeout, }); const attackDiscoveries = result.records; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_data_client.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_data_client.ts index f462584a60ea0..e8f7f573868a6 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_data_client.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_data_client.ts @@ -8,12 +8,9 @@ import type { Logger, ElasticsearchClient, SavedObjectsClientContract } from '@kbn/core/server'; import type { TaskManagerStartContract } from '@kbn/task-manager-plugin/server'; import type { AuditLogger } from '@kbn/security-plugin-types-server'; +import { RiskEngineStatusEnum } from '../../../../common/api/entity_analytics/risk_engine/engine_status_route.gen'; import type { InitRiskEngineResult } from '../../../../common/entity_analytics/risk_engine'; -import { - RiskEngineStatus, - MAX_SPACES_COUNT, - RiskScoreEntity, -} from '../../../../common/entity_analytics/risk_engine'; +import { MAX_SPACES_COUNT, RiskScoreEntity } from '../../../../common/entity_analytics/risk_engine'; import { removeLegacyTransforms, getLegacyTransforms } from '../utils/transforms'; import { updateSavedObjectAttribute, @@ -199,7 +196,7 @@ export class RiskEngineDataClient { public async disableLegacyRiskEngine({ namespace }: { namespace: string }) { const legacyRiskEngineStatus = await this.getLegacyStatus({ namespace }); - if (legacyRiskEngineStatus === RiskEngineStatus.NOT_INSTALLED) { + if (legacyRiskEngineStatus === RiskEngineStatusEnum.NOT_INSTALLED) { return true; } @@ -221,17 +218,17 @@ export class RiskEngineDataClient { const newlegacyRiskEngineStatus = await this.getLegacyStatus({ namespace }); - return newlegacyRiskEngineStatus === RiskEngineStatus.NOT_INSTALLED; + return newlegacyRiskEngineStatus === RiskEngineStatusEnum.NOT_INSTALLED; } private async getCurrentStatus() { const configuration = await this.getConfiguration(); if (configuration) { - return configuration.enabled ? RiskEngineStatus.ENABLED : RiskEngineStatus.DISABLED; + return configuration.enabled ? RiskEngineStatusEnum.ENABLED : RiskEngineStatusEnum.DISABLED; } - return RiskEngineStatus.NOT_INSTALLED; + return RiskEngineStatusEnum.NOT_INSTALLED; } private async getIsMaxAmountOfRiskEnginesReached() { @@ -271,9 +268,9 @@ export class RiskEngineDataClient { }); if (transforms.length === 0) { - return RiskEngineStatus.NOT_INSTALLED; + return RiskEngineStatusEnum.NOT_INSTALLED; } - return RiskEngineStatus.ENABLED; + return RiskEngineStatusEnum.ENABLED; } } diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_privileges.test.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_privileges.test.ts index f464292713420..e689bcf9f3ca5 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_privileges.test.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_privileges.test.ts @@ -4,7 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { EntityAnalyticsPrivileges } from '../../../../common/api/entity_analytics/common'; + +import type { EntityAnalyticsPrivileges } from '../../../../common/api/entity_analytics'; import { _getMissingPrivilegesMessage } from './risk_engine_privileges'; describe('_getMissingPrivilegesMessage', () => { diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_privileges.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_privileges.ts index 573f8147f8b90..56f6fb80fe859 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_privileges.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/risk_engine_privileges.ts @@ -14,7 +14,7 @@ import type { import { buildSiemResponse } from '@kbn/lists-plugin/server/routes'; import type { SecurityPluginStart } from '@kbn/security-plugin/server'; import { i18n } from '@kbn/i18n'; -import type { EntityAnalyticsPrivileges } from '../../../../common/api/entity_analytics/common'; +import type { EntityAnalyticsPrivileges } from '../../../../common/api/entity_analytics'; import type { SecuritySolutionPluginStartDependencies } from '../../../plugin_contract'; import type { SecuritySolutionRequestHandlerContext } from '../../../types'; import { diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/disable.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/disable.ts index 5a8d44ef057a8..f1f0348a69e33 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/disable.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/disable.ts @@ -7,6 +7,7 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; +import type { RiskEngineDisableResponse } from '../../../../../common/api/entity_analytics/risk_engine/engine_disable_route.gen'; import { RISK_ENGINE_DISABLE_URL, APP_ID } from '../../../../../common/constants'; import { TASK_MANAGER_UNAVAILABLE_ERROR } from './translations'; import { withRiskEnginePrivilegeCheck } from '../risk_engine_privileges'; @@ -70,7 +71,8 @@ export const riskEngineDisableRoute = ( try { await riskEngineClient.disableRiskEngine({ taskManager }); - return response.ok({ body: { success: true } }); + const body: RiskEngineDisableResponse = { success: true }; + return response.ok({ body }); } catch (e) { const error = transformError(e); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/enable.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/enable.ts index 237f10bc00ad6..a4eed8701d1e1 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/enable.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/enable.ts @@ -7,6 +7,7 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; +import type { RiskEngineEnableResponse } from '../../../../../common/api/entity_analytics/risk_engine/engine_enable_route.gen'; import { RISK_ENGINE_ENABLE_URL, APP_ID } from '../../../../../common/constants'; import { TASK_MANAGER_UNAVAILABLE_ERROR } from './translations'; import { withRiskEnginePrivilegeCheck } from '../risk_engine_privileges'; @@ -68,7 +69,8 @@ export const riskEngineEnableRoute = ( try { await riskEngineClient.enableRiskEngine({ taskManager }); - return response.ok({ body: { success: true } }); + const body: RiskEngineEnableResponse = { success: true }; + return response.ok({ body }); } catch (e) { const error = transformError(e); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/init.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/init.ts index 0b0efda642fc0..8360f3652a7f3 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/init.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/init.ts @@ -7,9 +7,13 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; +import type { + RiskEngineInitResponse, + RiskEngineInitResult, +} from '../../../../../common/api/entity_analytics/risk_engine/engine_init_route.gen'; import { RISK_ENGINE_INIT_URL, APP_ID } from '../../../../../common/constants'; import { TASK_MANAGER_UNAVAILABLE_ERROR } from './translations'; -import type { EntityAnalyticsRoutesDeps, InitRiskEngineResultResponse } from '../../types'; +import type { EntityAnalyticsRoutesDeps } from '../../types'; import { withRiskEnginePrivilegeCheck } from '../risk_engine_privileges'; import { RiskEngineAuditActions } from '../audit'; import { AUDIT_CATEGORY, AUDIT_OUTCOME, AUDIT_TYPE } from '../../audit'; @@ -60,7 +64,7 @@ export const riskEngineInitRoute = ( riskScoreDataClient, }); - const initResultResponse: InitRiskEngineResultResponse = { + const result: RiskEngineInitResult = { risk_engine_enabled: initResult.riskEngineEnabled, risk_engine_resources_installed: initResult.riskEngineResourcesInstalled, risk_engine_configuration_created: initResult.riskEngineConfigurationCreated, @@ -68,6 +72,10 @@ export const riskEngineInitRoute = ( errors: initResult.errors, }; + const initResponse: RiskEngineInitResponse = { + result, + }; + if ( !initResult.riskEngineEnabled || !initResult.riskEngineResourcesInstalled || @@ -76,13 +84,13 @@ export const riskEngineInitRoute = ( return siemResponse.error({ statusCode: 400, body: { - message: initResultResponse.errors.join('\n'), - full_error: initResultResponse, + message: result.errors.join('\n'), + full_error: result, }, bypassErrorFormat: true, }); } - return response.ok({ body: { result: initResultResponse } }); + return response.ok({ body: initResponse }); } catch (e) { const error = transformError(e); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/privileges.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/privileges.ts index d7343343a1c3d..38b48aca7e5ab 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/privileges.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/privileges.ts @@ -7,6 +7,7 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; +import type { EntityAnalyticsPrivileges } from '../../../../../common/api/entity_analytics'; import { RISK_ENGINE_PRIVILEGES_URL, APP_ID } from '../../../../../common/constants'; import { AUDIT_CATEGORY, AUDIT_OUTCOME, AUDIT_TYPE } from '../../audit'; import { RiskScoreAuditActions } from '../../risk_score/audit'; @@ -31,7 +32,7 @@ export const riskEnginePrivilegesRoute = ( const [_, { security }] = await getStartServices(); const securitySolution = await context.securitySolution; - const body = await getUserRiskEnginePrivileges(request, security); + const body: EntityAnalyticsPrivileges = await getUserRiskEnginePrivileges(request, security); securitySolution.getAuditLogger()?.log({ message: 'User checked if they have the required privileges to configure the risk engine', diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/settings.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/settings.ts index e538ae660b6eb..032114f7871b6 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/settings.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/settings.ts @@ -7,6 +7,7 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; +import type { RiskEngineSettingsResponse } from '../../../../../common/api/entity_analytics/risk_engine'; import { RISK_ENGINE_SETTINGS_URL, APP_ID } from '../../../../../common/constants'; import { AUDIT_CATEGORY, AUDIT_OUTCOME, AUDIT_TYPE } from '../../audit'; import type { EntityAnalyticsRoutesDeps } from '../../types'; @@ -42,10 +43,11 @@ export const riskEngineSettingsRoute = (router: EntityAnalyticsRoutesDeps['route if (!result) { throw new Error('Unable to get risk engine configuration'); } + const body: RiskEngineSettingsResponse = { + range: result.range, + }; return response.ok({ - body: { - range: result.range, - }, + body, }); } catch (e) { const error = transformError(e); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/status.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/status.ts index 46384eb776aec..331638dcb4ba4 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/status.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/routes/status.ts @@ -7,6 +7,7 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; +import type { RiskEngineStatusResponse } from '../../../../../common/api/entity_analytics/risk_engine/engine_status_route.gen'; import { RISK_ENGINE_STATUS_URL, APP_ID } from '../../../../../common/constants'; import type { EntityAnalyticsRoutesDeps } from '../../types'; @@ -27,16 +28,18 @@ export const riskEngineStatusRoute = (router: EntityAnalyticsRoutesDeps['router' const spaceId = securitySolution.getSpaceId(); try { - const result = await riskEngineClient.getStatus({ - namespace: spaceId, - }); - return response.ok({ - body: { - risk_engine_status: result.riskEngineStatus, - legacy_risk_engine_status: result.legacyRiskEngineStatus, - is_max_amount_of_risk_engines_reached: result.isMaxAmountOfRiskEnginesReached, - }, - }); + const { riskEngineStatus, legacyRiskEngineStatus, isMaxAmountOfRiskEnginesReached } = + await riskEngineClient.getStatus({ + namespace: spaceId, + }); + + const body: RiskEngineStatusResponse = { + risk_engine_status: riskEngineStatus, + legacy_risk_engine_status: legacyRiskEngineStatus, + is_max_amount_of_risk_engines_reached: isMaxAmountOfRiskEnginesReached, + }; + + return response.ok({ body }); } catch (e) { const error = transformError(e); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/schema/risk_score_apis.yml b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/schema/risk_score_apis.yml deleted file mode 100644 index 02471038ddb38..0000000000000 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_engine/schema/risk_score_apis.yml +++ /dev/null @@ -1,485 +0,0 @@ -openapi: 3.0.0 -info: - version: 1.0.0 - title: Risk Scoring API - description: These APIs allow the consumer to manage Entity Risk Scores within Entity Analytics. -paths: - /calculate: - post: - summary: Trigger calculation of Risk Scores - description: Calculates and persists a segment of Risk Scores, returning details about the calculation. - requestBody: - description: Details about the Risk Scores being calculated - content: - application/json: - schema: - $ref: '#/components/schemas/RiskScoresCalculationRequest' - required: true - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/RiskScoresCalculationResponse' - '400': - description: Invalid request - /preview: - post: - summary: Preview the calculation of Risk Scores - description: Calculates and returns a list of Risk Scores, sorted by identifier_type and risk score. - requestBody: - description: Details about the Risk Scores being requested - content: - application/json: - schema: - $ref: '#/components/schemas/RiskScoresPreviewRequest' - required: true - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/RiskScoresPreviewResponse' - '400': - description: Invalid request - /engine/status: - get: - summary: Get the status of the Risk Engine - description: Returns the status of both the legacy transform-based risk engine, as well as the new risk engine - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/RiskEngineStatusResponse' - - /engine/init: - post: - summary: Initialize the Risk Engine - description: Initializes the Risk Engine by creating the necessary indices and mappings, removing old transforms, and starting the new risk engine - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/RiskEngineInitResponse' - /engine/enable: - post: - summary: Enable the Risk Engine - requestBody: - content: - application/json: {} - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/RiskEngineEnableResponse' - /engine/disable: - post: - summary: Disable the Risk Engine - requestBody: - content: - application/json: {} - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/RiskEngineDisableResponse' - /engine/privileges: - get: - summary: Check if the user has access to the risk engine - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/RiskEnginePrivilegesResponse' - /engine/settings: - get: - summary: Get the settings of the Risk Engine - responses: - '200': - description: Successful response - content: - application/json: - schema: - $ref: '#/components/schemas/RiskEngineSettingsResponse' - - -components: - schemas: - RiskScoresCalculationRequest: - type: object - required: - - data_view_id - - identifier_type - - range - properties: - after_keys: - description: Used to calculate a specific "page" of risk scores. If unspecified, the first "page" of scores is returned. See also the `after_keys` key in a risk scores response. - allOf: - - $ref: '#/components/schemas/AfterKeys' - data_view_id: - $ref: '#/components/schemas/DataViewId' - description: The identifier of the Kibana data view to be used when generating risk scores. If a data view is not found, the provided ID will be used as the query's index pattern instead. - debug: - description: If set to `true`, the internal ES requests/responses will be logged in Kibana. - type: boolean - filter: - $ref: '#/components/schemas/Filter' - description: An elasticsearch DSL filter object. Used to filter the data being scored, which implicitly filters the risk scores calculated. - page_size: - $ref: '#/components/schemas/PageSize' - identifier_type: - description: Used to restrict the type of risk scores calculated. - allOf: - - $ref: '#/components/schemas/IdentifierType' - range: - $ref: '#/components/schemas/DateRange' - description: Defines the time period over which scores will be evaluated. If unspecified, a range of `[now, now-30d]` will be used. - weights: - $ref: '#/components/schemas/RiskScoreWeights' - - RiskScoresPreviewRequest: - type: object - required: - - data_view_id - properties: - after_keys: - description: Used to retrieve a specific "page" of risk scores. If unspecified, the first "page" of scores is returned. See also the `after_keys` key in a risk scores response. - allOf: - - $ref: '#/components/schemas/AfterKeys' - data_view_id: - $ref: '#/components/schemas/DataViewId' - description: The identifier of the Kibana data view to be used when generating risk scores. If a data view is not found, the provided ID will be used as the query's index pattern instead. - debug: - description: If set to `true`, a `debug` key is added to the response, containing both the internal request and response with elasticsearch. - type: boolean - filter: - $ref: '#/components/schemas/Filter' - description: An elasticsearch DSL filter object. Used to filter the data being scored, which implicitly filters the risk scores returned. - page_size: - $ref: '#/components/schemas/PageSize' - identifier_type: - description: Used to restrict the type of risk scores involved. If unspecified, both `host` and `user` scores will be returned. - allOf: - - $ref: '#/components/schemas/IdentifierType' - range: - $ref: '#/components/schemas/DateRange' - description: Defines the time period over which scores will be evaluated. If unspecified, a range of `[now, now-30d]` will be used. - weights: - $ref: '#/components/schemas/RiskScoreWeights' - - RiskScoresCalculationResponse: - type: object - required: - - after_keys - - errors - - scores_written - properties: - after_keys: - description: Used to obtain the next "page" of risk scores. See also the `after_keys` key in a risk scores request. If this key is empty, the calculation is complete. - allOf: - - $ref: '#/components/schemas/AfterKeys' - errors: - type: array - description: A list of errors encountered during the calculation. - items: - type: string - scores_written: - type: number - format: integer - description: The number of risk scores persisted to elasticsearch. - - RiskScoresPreviewResponse: - type: object - required: - - after_keys - - scores - properties: - after_keys: - description: Used to obtain the next "page" of risk scores. See also the `after_keys` key in a risk scores request. If this key is empty, the calculation is complete. - allOf: - - $ref: '#/components/schemas/AfterKeys' - debug: - description: Object containing debug information, particularly the internal request and response from elasticsearch - type: object - properties: - request: - type: string - response: - type: string - scores: - type: array - description: A list of risk scores - items: - $ref: '#/components/schemas/RiskScore' - RiskEngineStatusResponse: - type: object - properties: - legacy_risk_engine_status: - $ref: '#/components/schemas/RiskEngineStatus' - risk_engine_status: - $ref: '#/components/schemas/RiskEngineStatus' - is_max_amount_of_risk_engines_reached: - description: Indicates whether the maximum amount of risk engines has been reached - type: boolean - RiskEngineInitResponse: - type: object - properties: - result: - type: object - properties: - risk_engine_enabled: - type: boolean - risk_engine_resources_installed: - type: boolean - risk_engine_configuration_created: - type: boolean - legacy_risk_engine_disabled: - type: boolean - errors: - type: array - items: - type: string - - - - RiskEngineEnableResponse: - type: object - properties: - success: - type: boolean - RiskEngineDisableResponse: - type: object - properties: - success: - type: boolean - - - AfterKeys: - type: object - properties: - host: - type: object - additionalProperties: - type: string - user: - type: object - additionalProperties: - type: string - example: - host: - 'host.name': 'example.host' - user: - 'user.name': 'example_user_name' - DataViewId: - description: The identifier of the Kibana data view to be used when generating risk scores. - example: security-solution-default - type: string - Filter: - description: An elasticsearch DSL filter object. Used to filter the risk inputs involved, which implicitly filters the risk scores themselves. - $ref: 'https://cloud.elastic.co/api/v1/api-docs/spec.json#/definitions/QueryContainer' - PageSize: - description: Specifies how many scores will be involved in a given calculation. Note that this value is per `identifier_type`, i.e. a value of 10 will calculate 10 host scores and 10 user scores, if available. To avoid missed data, keep this value consistent while paginating through scores. - default: 1000 - type: number - DateRange: - description: Defines the time period on which risk inputs will be filtered. - type: object - required: - - start - - end - properties: - start: - $ref: '#/components/schemas/KibanaDate' - end: - $ref: '#/components/schemas/KibanaDate' - KibanaDate: - type: string - oneOf: - - format: date - - format: date-time - - format: datemath - example: '2017-07-21T17:32:28Z' - IdentifierType: - type: string - enum: - - host - - user - RiskScore: - type: object - required: - - '@timestamp' - - id_field - - id_value - - calculated_level - - calculated_score - - calculated_score_norm - - category_1_score - - category_1_count - - inputs - properties: - '@timestamp': - type: string - format: 'date-time' - example: '2017-07-21T17:32:28Z' - description: The time at which the risk score was calculated. - id_field: - type: string - example: 'host.name' - description: The identifier field defining this risk score. Coupled with `id_value`, uniquely identifies the entity being scored. - id_value: - type: string - example: 'example.host' - description: The identifier value defining this risk score. Coupled with `id_field`, uniquely identifies the entity being scored. - calculated_level: - type: string - example: 'Critical' - description: Lexical description of the entity's risk. - calculated_score: - type: number - format: double - description: The raw numeric value of the given entity's risk score. - calculated_score_norm: - type: number - format: double - minimum: 0 - maximum: 100 - description: The normalized numeric value of the given entity's risk score. Useful for comparing with other entities. - category_1_score: - type: number - format: double - description: The contribution of Category 1 to the overall risk score (`calculated_score`). Category 1 contains Detection Engine Alerts. - category_1_count: - type: number - format: integer - description: The number of risk input documents that contributed to the Category 1 score (`category_1_score`). - inputs: - type: array - description: A list of the highest-risk documents contributing to this risk score. Useful for investigative purposes. - items: - $ref: '#/components/schemas/RiskScoreInput' - - RiskScoreInput: - description: A generic representation of a document contributing to a Risk Score. - type: object - properties: - id: - type: string - example: 91a93376a507e86cfbf282166275b89f9dbdb1f0be6c8103c6ff2909ca8e1a1c - description: The unique identifier (`_id`) of the original source document - index: - type: string - example: .internal.alerts-security.alerts-default-000001 - description: The unique index (`_index`) of the original source document - category: - type: string - example: category_1 - description: The risk category of the risk input document. - description: - type: string - example: 'Generated from Detection Engine Rule: Malware Prevention Alert' - description: A human-readable description of the risk input document. - risk_score: - type: number - format: double - minimum: 0 - maximum: 100 - description: The weighted risk score of the risk input document. - timestamp: - type: string - example: '2017-07-21T17:32:28Z' - description: The @timestamp of the risk input document. - RiskScoreWeight: - description: "Configuration used to tune risk scoring. Weights can be used to change the score contribution of risk inputs for hosts and users at both a global level and also for Risk Input categories (e.g. 'category_1')." - type: object - required: - - type - properties: - type: - type: string - value: - type: string - host: - type: number - format: double - minimum: 0 - maximum: 1 - user: - type: number - format: double - minimum: 0 - maximum: 1 - example: - type: 'risk_category' - value: 'category_1' - host: 0.8 - user: 0.4 - RiskScoreWeights: - description: 'A list of weights to be applied to the scoring calculation.' - type: array - items: - $ref: '#/components/schemas/RiskScoreWeight' - example: - - type: 'risk_category' - value: 'category_1' - host: 0.8 - user: 0.4 - - type: 'global_identifier' - host: 0.5 - user: 0.1 - RiskEngineStatus: - type: string - enum: - - 'NOT_INSTALLED' - - 'DISABLED' - - 'ENABLED' - RiskEngineInitStep: - type: object - required: - - type - - success - properties: - type: - type: string - success: - type: boolean - error: - type: string - RiskEnginePrivilegesResponse: - type: object - properties: - privileges: - type: object - properties: - elasticsearch: - type: object - properties: - cluster: - type: object - additionalProperties: - type: boolean - index: - type: object - additionalProperties: - type: object - additionalProperties: - type: boolean - has_all_required: - description: If true then the user has full access to the risk engine - type: boolean - RiskEngineSettingsResponse: - type: object - properties: - range: - $ref: '#/components/schemas/DateRange' diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_and_persist_risk_scores.mock.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_and_persist_risk_scores.mock.ts index 093e1b8235113..27db9b98b5285 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_and_persist_risk_scores.mock.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_and_persist_risk_scores.mock.ts @@ -5,11 +5,11 @@ * 2.0. */ -import type { CalculateAndPersistScoresResponse } from '../types'; +import type { RiskScoresCalculationResponse } from '../../../../common/api/entity_analytics/risk_engine/calculation_route.gen'; const buildResponseMock = ( - overrides: Partial = {} -): CalculateAndPersistScoresResponse => ({ + overrides: Partial = {} +): RiskScoresCalculationResponse => ({ after_keys: { host: { 'host.name': 'hostname' }, }, diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_and_persist_risk_scores.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_and_persist_risk_scores.ts index aa67d4abf78ba..996beffbf62fe 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_and_persist_risk_scores.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_and_persist_risk_scores.ts @@ -7,10 +7,11 @@ import type { ElasticsearchClient, Logger } from '@kbn/core/server'; +import type { RiskScoresCalculationResponse } from '../../../../common/api/entity_analytics/risk_engine/calculation_route.gen'; import type { RiskScoreDataClient } from './risk_score_data_client'; -import type { CalculateAndPersistScoresParams, CalculateAndPersistScoresResponse } from '../types'; import type { AssetCriticalityService } from '../asset_criticality/asset_criticality_service'; import { calculateRiskScores } from './calculate_risk_scores'; +import type { CalculateAndPersistScoresParams } from '../types'; export const calculateAndPersistRiskScores = async ( params: CalculateAndPersistScoresParams & { @@ -20,7 +21,7 @@ export const calculateAndPersistRiskScores = async ( spaceId: string; riskScoreDataClient: RiskScoreDataClient; } -): Promise => { +): Promise => { const { riskScoreDataClient, spaceId, returnScores, refresh, ...rest } = params; const writer = await riskScoreDataClient.getWriter({ diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.mock.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.mock.ts index 4789ecffe1f7e..027c153f09fca 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.mock.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.mock.ts @@ -5,13 +5,11 @@ * 2.0. */ -import { RiskCategories, RiskLevels } from '../../../../common/entity_analytics/risk_engine'; -import type { RiskScore } from '../../../../common/entity_analytics/risk_engine'; -import type { - CalculateRiskScoreAggregations, - CalculateScoresResponse, - RiskScoreBucket, -} from '../types'; +import { RiskCategories } from '../../../../common/entity_analytics/risk_engine'; +import type { CalculateRiskScoreAggregations, RiskScoreBucket } from '../types'; +import type { RiskScoresCalculationResponse } from '../../../../common/api/entity_analytics/risk_engine/calculation_route.gen'; +import type { EntityRiskScoreRecord } from '../../../../common/api/entity_analytics/common'; +import { EntityRiskLevelsEnum } from '../../../../common/api/entity_analytics/common'; const buildRiskScoreBucketMock = (overrides: Partial = {}): RiskScoreBucket => ({ key: { 'user.name': 'username' }, @@ -60,8 +58,8 @@ const buildAggregationResponseMock = ( }); const buildResponseMock = ( - overrides: Partial = {} -): CalculateScoresResponse => ({ + overrides: Partial = {} +): RiskScoresCalculationResponse => ({ after_keys: { host: { 'host.name': 'hostname' } }, scores: { host: [ @@ -71,7 +69,7 @@ const buildResponseMock = ( id_value: 'hostname', criticality_level: 'high_impact', criticality_modifier: 1.5, - calculated_level: RiskLevels.unknown, + calculated_level: EntityRiskLevelsEnum.Unknown, calculated_score: 20, calculated_score_norm: 30, category_1_score: 30, @@ -94,11 +92,13 @@ const buildResponseMock = ( ], user: [], }, + errors: [], + scores_written: 1, ...overrides, }); const buildResponseWithOneScoreMock = () => - buildResponseMock({ scores: { host: [{} as RiskScore] } }); + buildResponseMock({ scores: { host: [{} as EntityRiskScoreRecord] } }); export const calculateRiskScoresMock = { buildResponse: buildResponseMock, diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.ts index c4ac061d259fb..3c930ec07e666 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/calculate_risk_scores.ts @@ -18,11 +18,14 @@ import { ALERT_WORKFLOW_STATUS, EVENT_KIND, } from '@kbn/rule-registry-plugin/common/technical_rule_data_field_names'; +import type { RiskScoresPreviewResponse } from '../../../../common/api/entity_analytics/risk_engine/preview_route.gen'; +import type { + AfterKeys, + EntityRiskScoreRecord, + RiskScoreWeights, +} from '../../../../common/api/entity_analytics/common'; import { - type AfterKeys, type IdentifierType, - type RiskWeights, - type RiskScore, getRiskLevel, RiskCategories, } from '../../../../common/entity_analytics/risk_engine'; @@ -45,7 +48,6 @@ import { import type { CalculateRiskScoreAggregations, CalculateScoresParams, - CalculateScoresResponse, RiskScoreBucket, } from '../types'; import { @@ -67,7 +69,7 @@ const formatForResponse = ({ now: string; identifierField: string; includeNewFields: boolean; -}): RiskScore => { +}): EntityRiskScoreRecord => { const riskDetails = bucket.top_inputs.risk_details; const criticalityModifier = getCriticalityModifier(criticality?.criticality_level); @@ -173,7 +175,7 @@ const buildIdentifierTypeAggregation = ({ afterKeys: AfterKeys; identifierType: IdentifierType; pageSize: number; - weights?: RiskWeights; + weights?: RiskScoreWeights; alertSampleSizePerShard: number; }): AggregationsAggregationContainer => { const globalIdentifierTypeWeight = getGlobalWeightForIdentifierType({ identifierType, weights }); @@ -249,7 +251,7 @@ const processScores = async ({ identifierField: string; logger: Logger; now: string; -}): Promise => { +}): Promise => { if (buckets.length === 0) { return []; } @@ -302,7 +304,7 @@ export const calculateRiskScores = async ({ assetCriticalityService: AssetCriticalityService; esClient: ElasticsearchClient; logger: Logger; -} & CalculateScoresParams): Promise => +} & CalculateScoresParams): Promise => withSecuritySpan('calculateRiskScores', async () => { const now = new Date().toISOString(); const filter = [ diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/helpers.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/helpers.ts index f5df6ef1b80ee..c39215cb0cc21 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/helpers.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/helpers.ts @@ -5,12 +5,9 @@ * 2.0. */ -import type { - AfterKey, - AfterKeys, - IdentifierType, -} from '../../../../common/entity_analytics/risk_engine'; -import type { CalculateAndPersistScoresResponse } from '../types'; +import type { RiskScoresCalculationResponse } from '../../../../common/api/entity_analytics/risk_engine/calculation_route.gen'; +import type { AfterKeys, EntityAfterKey } from '../../../../common/api/entity_analytics/common'; +import type { IdentifierType } from '../../../../common/entity_analytics/risk_engine'; export const getFieldForIdentifier = (identifierType: IdentifierType): string => identifierType === 'host' ? 'host.name' : 'user.name'; @@ -21,10 +18,8 @@ export const getAfterKeyForIdentifierType = ({ }: { afterKeys: AfterKeys; identifierType: IdentifierType; -}): AfterKey | undefined => afterKeys[identifierType]; +}): EntityAfterKey | undefined => afterKeys[identifierType]; -export const isRiskScoreCalculationComplete = ( - result: CalculateAndPersistScoresResponse -): boolean => +export const isRiskScoreCalculationComplete = (result: RiskScoresCalculationResponse): boolean => Object.keys(result.after_keys.host ?? {}).length === 0 && Object.keys(result.after_keys.user ?? {}).length === 0; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_engine_data_writer.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_engine_data_writer.ts index e140090ea55e4..e24f09e7b2cc8 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_engine_data_writer.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_engine_data_writer.ts @@ -7,7 +7,8 @@ import type { BulkOperationContainer } from '@elastic/elasticsearch/lib/api/types'; import type { Logger, ElasticsearchClient } from '@kbn/core/server'; -import type { IdentifierType, RiskScore } from '../../../../common/entity_analytics/risk_engine'; +import type { EntityRiskScoreRecord } from '../../../../common/api/entity_analytics/common'; +import type { IdentifierType } from '../../../../common/entity_analytics/risk_engine'; interface WriterBulkResponse { errors: string[]; @@ -16,8 +17,8 @@ interface WriterBulkResponse { } interface BulkParams { - host?: RiskScore[]; - user?: RiskScore[]; + host?: EntityRiskScoreRecord[]; + user?: EntityRiskScoreRecord[]; refresh?: 'wait_for'; } @@ -83,7 +84,7 @@ export class RiskEngineDataWriter implements RiskEngineDataWriter { return hostBody.concat(userBody) as BulkOperationContainer[]; }; - private scoreToEcs = (score: RiskScore, identifierType: IdentifierType): unknown => { + private scoreToEcs = (score: EntityRiskScoreRecord, identifierType: IdentifierType): unknown => { const { '@timestamp': _, ...rest } = score; return { '@timestamp': score['@timestamp'], diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_service.mock.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_service.mock.ts index a7ca5c6ce27d5..2423a87559b17 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_service.mock.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_service.mock.ts @@ -6,14 +6,16 @@ */ import type { RiskScoreService } from './risk_score_service'; -import type { RiskScore } from '../../../../common/entity_analytics/risk_engine'; -import { RiskLevels } from '../../../../common/entity_analytics/risk_engine'; +import type { EntityRiskScoreRecord } from '../../../../common/api/entity_analytics/common'; +import { EntityRiskLevelsEnum } from '../../../../common/api/entity_analytics/common'; -const createRiskScoreMock = (overrides: Partial = {}): RiskScore => ({ +const createRiskScoreMock = ( + overrides: Partial = {} +): EntityRiskScoreRecord => ({ '@timestamp': '2023-02-15T00:15:19.231Z', id_field: 'host.name', id_value: 'hostname', - calculated_level: RiskLevels.high, + calculated_level: EntityRiskLevelsEnum.High, calculated_score: 149, calculated_score_norm: 85.332, category_1_score: 85, diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_service.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_service.ts index b326f50f767a4..cb89d61d8720d 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_service.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_score_service.ts @@ -6,11 +6,11 @@ */ import type { ElasticsearchClient, Logger } from '@kbn/core/server'; +import type { RiskScoresCalculationResponse } from '../../../../common/api/entity_analytics/risk_engine/calculation_route.gen'; +import type { RiskScoresPreviewResponse } from '../../../../common/api/entity_analytics/risk_engine/preview_route.gen'; import type { CalculateAndPersistScoresParams, - CalculateAndPersistScoresResponse, CalculateScoresParams, - CalculateScoresResponse, EntityAnalyticsConfig, RiskEngineConfiguration, } from '../types'; @@ -26,10 +26,10 @@ export type RiskEngineConfigurationWithDefaults = RiskEngineConfiguration & { alertSampleSizePerShard: number; }; export interface RiskScoreService { - calculateScores: (params: CalculateScoresParams) => Promise; + calculateScores: (params: CalculateScoresParams) => Promise; calculateAndPersistScores: ( params: CalculateAndPersistScoresParams - ) => Promise; + ) => Promise; getConfigurationWithDefaults: ( entityAnalyticsConfig: EntityAnalyticsConfig ) => Promise; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_weights.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_weights.ts index de1754ba3de21..d0c7486324e30 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_weights.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/risk_weights.ts @@ -7,17 +7,17 @@ import { keyBy, merge } from 'lodash'; import type { - GlobalRiskWeight, - IdentifierType, - RiskCategoryRiskWeight, - RiskWeight, - RiskWeights, -} from '../../../../common/entity_analytics/risk_engine'; + RiskScoreWeight, + RiskScoreWeightCategory, + RiskScoreWeightGlobal, + RiskScoreWeights, +} from '../../../../common/api/entity_analytics/common'; +import type { IdentifierType } from '../../../../common/entity_analytics/risk_engine'; import { RiskCategories, RiskWeightTypes } from '../../../../common/entity_analytics/risk_engine'; const RISK_CATEGORIES = Object.values(RiskCategories); -const DEFAULT_CATEGORY_WEIGHTS: RiskWeights = RISK_CATEGORIES.map((category) => ({ +const DEFAULT_CATEGORY_WEIGHTS: RiskScoreWeights = RISK_CATEGORIES.map((category) => ({ type: RiskWeightTypes.riskCategory, value: category, host: 1, @@ -30,9 +30,9 @@ const DEFAULT_CATEGORY_WEIGHTS: RiskWeights = RISK_CATEGORIES.map((category) => const convertCategoryToEventKindValue = (category?: string): string | undefined => category === 'category_1' ? 'signal' : category; -const isGlobalIdentifierTypeWeight = (weight: RiskWeight): weight is GlobalRiskWeight => +const isGlobalIdentifierTypeWeight = (weight: RiskScoreWeight): weight is RiskScoreWeightGlobal => weight.type === RiskWeightTypes.global; -const isRiskCategoryWeight = (weight: RiskWeight): weight is RiskCategoryRiskWeight => +const isRiskCategoryWeight = (weight: RiskScoreWeight): weight is RiskScoreWeightCategory => weight.type === RiskWeightTypes.riskCategory; export const getGlobalWeightForIdentifierType = ({ @@ -40,15 +40,18 @@ export const getGlobalWeightForIdentifierType = ({ weights, }: { identifierType: IdentifierType; - weights?: RiskWeights; + weights?: RiskScoreWeights; }): number | undefined => { return weights?.find(isGlobalIdentifierTypeWeight)?.[identifierType]; }; -const getRiskCategoryWeights = (weights?: RiskWeights): RiskCategoryRiskWeight[] => +const getRiskCategoryWeights = (weights?: RiskScoreWeights): RiskScoreWeightCategory[] => weights?.filter(isRiskCategoryWeight) ?? []; -const getWeightForIdentifierType = (weight: RiskWeight, identifierType: IdentifierType): number => { +const getWeightForIdentifierType = ( + weight: RiskScoreWeight, + identifierType: IdentifierType +): number => { const configuredWeight = weight[identifierType]; return typeof configuredWeight === 'number' ? configuredWeight : 1; }; @@ -61,7 +64,7 @@ export const buildCategoryCountDeclarations = (): string => { return RISK_CATEGORIES.map((riskCategory) => `results['${riskCategory}_count'] = 0;`).join(''); }; -export const buildCategoryWeights = (userWeights?: RiskWeights): RiskCategoryRiskWeight[] => { +export const buildCategoryWeights = (userWeights?: RiskScoreWeights): RiskScoreWeightCategory[] => { const categoryWeights = getRiskCategoryWeights(userWeights); return Object.values( @@ -82,7 +85,7 @@ export const buildWeightingOfScoreByCategory = ({ userWeights, identifierType, }: { - userWeights?: RiskWeights; + userWeights?: RiskScoreWeights; identifierType: IdentifierType; }): string => { const otherClause = `weighted_score = score;`; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/calculation.test.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/calculation.test.ts index ad59a7306918b..9ef1cc8bc2106 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/calculation.test.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/calculation.test.ts @@ -100,27 +100,21 @@ describe('risk score calculation route', () => { const request = buildRequest({ data_view_id: undefined }); const result = await server.validate(request); - expect(result.badRequest).toHaveBeenCalledWith( - 'Invalid value "undefined" supplied to "data_view_id"' - ); + expect(result.badRequest).toHaveBeenCalledWith('data_view_id: Required'); }); it('requires a parameter for the date range', async () => { const request = buildRequest({ range: undefined }); const result = await server.validate(request); - expect(result.badRequest).toHaveBeenCalledWith( - 'Invalid value "undefined" supplied to "range"' - ); + expect(result.badRequest).toHaveBeenCalledWith('range: Required'); }); it('requires a parameter for the identifier type', async () => { const request = buildRequest({ identifier_type: undefined }); const result = await server.validate(request); - expect(result.badRequest).toHaveBeenCalledWith( - 'Invalid value "undefined" supplied to "identifier_type"' - ); + expect(result.badRequest).toHaveBeenCalledWith('identifier_type: Required'); }); }); @@ -143,9 +137,7 @@ describe('risk score calculation route', () => { const request = buildRequest({ range: 'bad range' }); const result = await server.validate(request); - expect(result.badRequest).toHaveBeenCalledWith( - 'Invalid value "bad range" supplied to "range"' - ); + expect(result.badRequest).toHaveBeenCalledWith('range: Expected object, received string'); }); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/calculation.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/calculation.ts index 210d792ded720..be4875d7dee04 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/calculation.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/calculation.ts @@ -8,13 +8,13 @@ import type { Logger } from '@kbn/core/server'; import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; +import { RiskScoresCalculationRequest } from '../../../../../common/api/entity_analytics/risk_engine/calculation_route.gen'; import { APP_ID, DEFAULT_RISK_SCORE_PAGE_SIZE, RISK_SCORE_CALCULATION_URL, } from '../../../../../common/constants'; -import { riskScoreCalculationRequestSchema } from '../../../../../common/entity_analytics/risk_engine/risk_score_calculation/request_schema'; -import { buildRouteValidation } from '../../../../utils/build_validation/route_validation'; +import { buildRouteValidationWithZod } from '../../../../utils/build_validation/route_validation'; import { getRiskInputsIndex } from '../get_risk_inputs_index'; import type { EntityAnalyticsRoutesDeps } from '../../types'; import { RiskScoreAuditActions } from '../audit'; @@ -36,7 +36,7 @@ export const riskScoreCalculationRoute = ( .addVersion( { version: '1', - validate: { request: { body: buildRouteValidation(riskScoreCalculationRequestSchema) } }, + validate: { request: { body: buildRouteValidationWithZod(RiskScoresCalculationRequest) } }, }, async (context, request, response) => { const securityContext = await context.securitySolution; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/entity_calculation.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/entity_calculation.ts index 98b4149f70230..502e296db3644 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/entity_calculation.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/entity_calculation.ts @@ -10,12 +10,13 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; import { isEmpty } from 'lodash/fp'; +import type { RiskScoresCalculationResponse } from '../../../../../common/api/entity_analytics/risk_engine/calculation_route.gen'; +import type { AfterKeys } from '../../../../../common/api/entity_analytics/common'; import { RiskScoresEntityCalculationRequest } from '../../../../../common/api/entity_analytics/risk_engine/entity_calculation_route.gen'; import { APP_ID, RISK_SCORE_ENTITY_CALCULATION_URL } from '../../../../../common/constants'; -import type { AfterKeys } from '../../../../../common/entity_analytics/risk_engine'; import { buildRouteValidationWithZod } from '../../../../utils/build_validation/route_validation'; import { getRiskInputsIndex } from '../get_risk_inputs_index'; -import type { CalculateAndPersistScoresResponse, EntityAnalyticsRoutesDeps } from '../../types'; +import type { EntityAnalyticsRoutesDeps } from '../../types'; import { RiskScoreAuditActions } from '../audit'; import { AUDIT_CATEGORY, AUDIT_OUTCOME, AUDIT_TYPE } from '../../audit'; import { convertRangeToISO } from '../tasks/helpers'; @@ -115,7 +116,7 @@ export const riskScoreEntityCalculationRoute = ( const filter = isEmpty(userFilter) ? [identifierFilter] : [userFilter, identifierFilter]; - const result: CalculateAndPersistScoresResponse = + const result: RiskScoresCalculationResponse = await riskScoreService.calculateAndPersistScores({ pageSize, identifierType, diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/preview.test.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/preview.test.ts index 9a525a5bae0d5..a35f4978ebf2c 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/preview.test.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/preview.test.ts @@ -67,9 +67,7 @@ describe('POST risk_engine/preview route', () => { const request = buildRequest({ data_view_id: undefined }); const result = await server.validate(request); - expect(result.badRequest).toHaveBeenCalledWith( - 'Invalid value "undefined" supplied to "data_view_id"' - ); + expect(result.badRequest).toHaveBeenCalledWith('data_view_id: Required'); }); it('respects the provided dataview', async () => { @@ -127,7 +125,7 @@ describe('POST risk_engine/preview route', () => { const result = await server.validate(request); expect(result.badRequest).toHaveBeenCalledWith( - expect.stringContaining('Invalid value "undefined" supplied to "range,start"') + expect.stringContaining('range.start: Required') ); }); }); @@ -211,7 +209,7 @@ describe('POST risk_engine/preview route', () => { const result = await server.validate(request); expect(result.badRequest).toHaveBeenCalledWith( - expect.stringContaining('Invalid value "1.1" supplied to "weights,host"') + expect.stringContaining('weights.0.host: Number must be less than or equal to 1') ); }); @@ -220,14 +218,16 @@ describe('POST risk_engine/preview route', () => { weights: [ { type: 'something new', - host: 1.1, + value: RiskCategories.category_1, + host: 0.1, + user: 0.2, }, ], }); const result = await server.validate(request); expect(result.badRequest).toHaveBeenCalledWith( - 'Invalid value "{"type":"something new","host":1.1}" supplied to "weights"' + expect.stringContaining('weights.0.type: Invalid literal value') ); }); }); @@ -245,7 +245,7 @@ describe('POST risk_engine/preview route', () => { ); }); - it('rejects an invalid after_key', async () => { + it('remove invalid after_key property', async () => { const request = buildRequest({ after_keys: { bad: 'key', @@ -253,7 +253,8 @@ describe('POST risk_engine/preview route', () => { }); const result = await server.validate(request); - expect(result.badRequest).toHaveBeenCalledWith('invalid keys "bad"'); + + expect(result.ok).toHaveBeenCalledWith(expect.objectContaining({ after_keys: {} })); }); }); }); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/preview.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/preview.ts index b592f3a8a48c8..0979b5900737a 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/preview.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/routes/preview.ts @@ -9,13 +9,13 @@ import type { Logger } from '@kbn/core/server'; import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; +import { RiskScoresPreviewRequest } from '../../../../../common/api/entity_analytics/risk_engine/preview_route.gen'; import { APP_ID, DEFAULT_RISK_SCORE_PAGE_SIZE, RISK_SCORE_PREVIEW_URL, } from '../../../../../common/constants'; -import { riskScorePreviewRequestSchema } from '../../../../../common/entity_analytics/risk_engine/risk_score_preview/request_schema'; -import { buildRouteValidation } from '../../../../utils/build_validation/route_validation'; +import { buildRouteValidationWithZod } from '../../../../utils/build_validation/route_validation'; import { getRiskInputsIndex } from '../get_risk_inputs_index'; import type { EntityAnalyticsRoutesDeps } from '../../types'; import { RiskScoreAuditActions } from '../audit'; @@ -37,7 +37,9 @@ export const riskScorePreviewRoute = ( .addVersion( { version: '1', - validate: { request: { body: buildRouteValidation(riskScorePreviewRequestSchema) } }, + validate: { + request: { body: buildRouteValidationWithZod(RiskScoresPreviewRequest) }, + }, }, async (context, request, response) => { const siemResponse = buildSiemResponse(response); diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/tasks/risk_scoring_task.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/tasks/risk_scoring_task.ts index b3d25855ba427..1b2b44dae6a95 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/tasks/risk_scoring_task.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/risk_score/tasks/risk_scoring_task.ts @@ -15,8 +15,8 @@ import type { } from '@kbn/task-manager-plugin/server'; import type { AnalyticsServiceSetup } from '@kbn/core-analytics-server'; import type { AuditLogger } from '@kbn/security-plugin-types-server'; +import type { AfterKeys } from '../../../../../common/api/entity_analytics/common'; import { - type AfterKeys, type IdentifierType, RiskScoreEntity, } from '../../../../../common/entity_analytics/risk_engine'; diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/types.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/types.ts index a71912d2dffa4..dfc4e45187e05 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/types.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/types.ts @@ -5,17 +5,14 @@ * 2.0. */ -import type { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/types'; import type { Logger, StartServicesAccessor } from '@kbn/core/server'; +import type { MappingRuntimeFields } from '@elastic/elasticsearch/lib/api/types'; import type { - AfterKey, AfterKeys, - IdentifierType, - RiskWeights, - Range, - RiskEngineStatus, - RiskScore, -} from '../../../common/entity_analytics/risk_engine'; + EntityAfterKey, + RiskScoreWeights, +} from '../../../common/api/entity_analytics/common'; +import type { IdentifierType, Range } from '../../../common/entity_analytics/risk_engine'; import type { ConfigType } from '../../config'; import type { StartPlugins } from '../../plugin'; import type { SecuritySolutionPluginRouter } from '../../types'; @@ -27,103 +24,14 @@ export interface EntityAnalyticsRoutesDeps { config: ConfigType; getStartServices: StartServicesAccessor; } -export interface CalculateScoresParams { - afterKeys: AfterKeys; - debug?: boolean; - index: string; - filter?: unknown; - identifierType?: IdentifierType; - pageSize: number; - range: { start: string; end: string }; - runtimeMappings: MappingRuntimeFields; - weights?: RiskWeights; - alertSampleSizePerShard?: number; -} - -export interface CalculateAndPersistScoresParams { - afterKeys: AfterKeys; - debug?: boolean; - index: string; - filter?: unknown; - identifierType: IdentifierType; - pageSize: number; - range: Range; - runtimeMappings: MappingRuntimeFields; - weights?: RiskWeights; - alertSampleSizePerShard?: number; - returnScores?: boolean; - refresh?: 'wait_for'; -} - -export interface CalculateAndPersistScoresResponse { - after_keys: AfterKeys; - errors: string[]; - scores_written: number; - scores?: { - host?: RiskScore[]; - user?: RiskScore[]; - }; -} - -export interface CalculateScoresResponse { - debug?: { - request: unknown; - response: unknown; - }; - after_keys: AfterKeys; - scores: { - host?: RiskScore[]; - user?: RiskScore[]; - }; -} - -export interface GetRiskEngineStatusResponse { - legacy_risk_engine_status: RiskEngineStatus; - risk_engine_status: RiskEngineStatus; - is_max_amount_of_risk_engines_reached: boolean; -} - -export interface InitRiskEngineResultResponse { - risk_engine_enabled: boolean; - risk_engine_resources_installed: boolean; - risk_engine_configuration_created: boolean; - legacy_risk_engine_disabled: boolean; - errors: string[]; -} - -export interface InitRiskEngineResponse { - result: InitRiskEngineResultResponse; -} - -export interface InitRiskEngineError { - body: { - message: string; - full_error: InitRiskEngineResultResponse | undefined; - }; -} - -export interface EnableDisableRiskEngineErrorResponse { - body: { - message: string; - full_error: string; - }; -} - -export interface EnableRiskEngineResponse { - success: boolean; -} - -export interface DisableRiskEngineResponse { - success: boolean; -} export interface CalculateRiskScoreAggregations { user?: { - after_key: AfterKey; + after_key: EntityAfterKey; buckets: RiskScoreBucket[]; }; host?: { - after_key: AfterKey; + after_key: EntityAfterKey; buckets: RiskScoreBucket[]; }; } @@ -165,3 +73,31 @@ export interface RiskEngineConfiguration { range: Range; alertSampleSizePerShard?: number; } + +export interface CalculateScoresParams { + afterKeys: AfterKeys; + debug?: boolean; + index: string; + filter?: unknown; + identifierType?: IdentifierType; + pageSize: number; + range: { start: string; end: string }; + runtimeMappings: MappingRuntimeFields; + weights?: RiskScoreWeights; + alertSampleSizePerShard?: number; +} + +export interface CalculateAndPersistScoresParams { + afterKeys: AfterKeys; + debug?: boolean; + index: string; + filter?: unknown; + identifierType: IdentifierType; + pageSize: number; + range: Range; + runtimeMappings: MappingRuntimeFields; + weights?: RiskScoreWeights; + alertSampleSizePerShard?: number; + returnScores?: boolean; + refresh?: 'wait_for'; +} diff --git a/x-pack/plugins/security_solution/server/lib/entity_analytics/utils/check_and_format_privileges.ts b/x-pack/plugins/security_solution/server/lib/entity_analytics/utils/check_and_format_privileges.ts index 0c9ac9036fad2..713405b11d5e8 100644 --- a/x-pack/plugins/security_solution/server/lib/entity_analytics/utils/check_and_format_privileges.ts +++ b/x-pack/plugins/security_solution/server/lib/entity_analytics/utils/check_and_format_privileges.ts @@ -11,8 +11,8 @@ import type { CheckPrivilegesResponse, SecurityPluginStart, } from '@kbn/security-plugin/server'; +import type { EntityAnalyticsPrivileges } from '../../../../common/api/entity_analytics'; import { ASSET_CRITICALITY_INDEX_PATTERN } from '../../../../common/entity_analytics/asset_criticality/constants'; -import type { EntityAnalyticsPrivileges } from '../../../../common/api/entity_analytics/common'; const groupPrivilegesByName = ( privileges: Array<{ privilege: PrivilegeName; diff --git a/x-pack/plugins/security_solution/server/lib/product_features_service/security_saved_objects.ts b/x-pack/plugins/security_solution/server/lib/product_features_service/security_saved_objects.ts index e34009121afb0..a1ea96631bdc2 100644 --- a/x-pack/plugins/security_solution/server/lib/product_features_service/security_saved_objects.ts +++ b/x-pack/plugins/security_solution/server/lib/product_features_service/security_saved_objects.ts @@ -11,6 +11,7 @@ import { savedObjectTypes } from '../../saved_objects'; // Same as the saved-object type for rules defined by Cloud Security Posture const CLOUD_POSTURE_SAVED_OBJECT_RULE_TYPE = 'csp_rule'; +const CLOUD_SECURITY_POSTURE_SETTINGS = 'cloud-security-posture-settings'; export const securityDefaultSavedObjects = [ 'exception-list', @@ -18,4 +19,5 @@ export const securityDefaultSavedObjects = [ DATA_VIEW_SAVED_OBJECT_TYPE, ...savedObjectTypes, CLOUD_POSTURE_SAVED_OBJECT_RULE_TYPE, + CLOUD_SECURITY_POSTURE_SETTINGS, ]; diff --git a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/risk_score/all/index.test.ts b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/risk_score/all/index.test.ts index b4be7a7cef71f..81f468d5dda0e 100644 --- a/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/risk_score/all/index.test.ts +++ b/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/risk_score/all/index.test.ts @@ -42,7 +42,7 @@ export const mockSearchStrategyResponse: IEsSearchResponse = { name: 'testUsername', risk: { rule_risks: [], - calculated_level: RiskSeverity.high, + calculated_level: RiskSeverity.High, calculated_score_norm: 75, multipliers: [], id_field: '', diff --git a/x-pack/plugins/serverless_observability/public/navigation_tree.ts b/x-pack/plugins/serverless_observability/public/navigation_tree.ts index 41efe7e4cadea..135c687655e2e 100644 --- a/x-pack/plugins/serverless_observability/public/navigation_tree.ts +++ b/x-pack/plugins/serverless_observability/public/navigation_tree.ts @@ -72,6 +72,7 @@ export const navigationTree: NavigationTreeDefinition = { { id: 'aiops', title: 'AIOps', + link: 'ml:anomalyDetection', renderAs: 'accordion', spaceBefore: null, children: [ @@ -80,6 +81,7 @@ export const navigationTree: NavigationTreeDefinition = { defaultMessage: 'Anomaly detection', }), link: 'ml:anomalyDetection', + id: 'ml:anomalyDetection', renderAs: 'item', children: [ { @@ -124,6 +126,7 @@ export const navigationTree: NavigationTreeDefinition = { title: i18n.translate('xpack.serverlessObservability.nav.applications', { defaultMessage: 'Applications', }), + link: 'apm:services', renderAs: 'accordion', children: [ { @@ -156,6 +159,7 @@ export const navigationTree: NavigationTreeDefinition = { title: i18n.translate('xpack.serverlessObservability.nav.infrastructure', { defaultMessage: 'Infrastructure', }), + link: 'metrics:inventory', renderAs: 'accordion', children: [ { diff --git a/x-pack/plugins/stack_connectors/public/connector_types/lib/servicenow/translations.ts b/x-pack/plugins/stack_connectors/public/connector_types/lib/servicenow/translations.ts index 547e641c019da..8f519e9661881 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/lib/servicenow/translations.ts +++ b/x-pack/plugins/stack_connectors/public/connector_types/lib/servicenow/translations.ts @@ -412,3 +412,32 @@ export const EVENT_ACTION_LABEL = i18n.translate( defaultMessage: 'Event action', } ); + +export const ADDITIONAL_INFO = i18n.translate( + 'xpack.stackConnectors.components.serviceNowITOM.additionalInfoLabel', + { + defaultMessage: 'Additional info', + } +); + +export const ADDITIONAL_INFO_HELP = i18n.translate( + 'xpack.stackConnectors.components.serviceNowITOM.additionalInfoHelpTooltip', + { + defaultMessage: 'Additional info help', + } +); + +export const ADDITIONAL_INFO_HELP_TEXT = i18n.translate( + 'xpack.stackConnectors.components.serviceNowITOM.additionalInfoHelpTooltipText', + { + defaultMessage: + 'The rule automatically generates information about each event. You can change or add more custom fields in JSON format.', + } +); + +export const ADDITIONAL_INFO_JSON_ERROR = i18n.translate( + 'xpack.stackConnectors.components.serviceNowITOM.additionalInfoError', + { + defaultMessage: 'The additional info field does not have a valid JSON format.', + } +); diff --git a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom.test.tsx b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom.test.tsx index 7673f4caf588e..c5063e0950b36 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom.test.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom.test.tsx @@ -33,7 +33,22 @@ describe('servicenow action params validation', () => { const actionParams = { subActionParams: { severity: 'Critical' } }; expect(await connectorTypeModel.validateParams(actionParams)).toEqual({ - errors: { ['severity']: [] }, + errors: { + ['severity']: [], + ['additional_info']: [], + }, + }); + }); + + test(`${SERVICENOW_ITOM_CONNECTOR_TYPE_ID}: params validation succeeds when additional_info is an empty string`, async () => { + const connectorTypeModel = connectorTypeRegistry.get(SERVICENOW_ITOM_CONNECTOR_TYPE_ID); + const actionParams = { subActionParams: { severity: 'Critical', additional_info: '' } }; + + expect(await connectorTypeModel.validateParams(actionParams)).toEqual({ + errors: { + ['severity']: [], + ['additional_info']: [], + }, }); }); @@ -42,7 +57,22 @@ describe('servicenow action params validation', () => { const actionParams = { subActionParams: { severity: null } }; expect(await connectorTypeModel.validateParams(actionParams)).toEqual({ - errors: { ['severity']: ['Severity is required.'] }, + errors: { + ['severity']: ['Severity is required.'], + ['additional_info']: [], + }, + }); + }); + + test(`${SERVICENOW_ITOM_CONNECTOR_TYPE_ID}: params validation fails when additional_info is not valid JSON`, async () => { + const connectorTypeModel = connectorTypeRegistry.get(SERVICENOW_ITOM_CONNECTOR_TYPE_ID); + const actionParams = { subActionParams: { severity: 'Critical', additional_info: 'foobar' } }; + + expect(await connectorTypeModel.validateParams(actionParams)).toEqual({ + errors: { + ['severity']: [], + ['additional_info']: ['The additional info field does not have a valid JSON format.'], + }, }); }); }); diff --git a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom.tsx b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom.tsx index 8c9d7e877f0ee..6fd62d22029dc 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom.tsx @@ -45,14 +45,20 @@ export function getServiceNowITOMConnectorType(): ConnectorTypeModel< const translations = await import('../lib/servicenow/translations'); const errors = { severity: new Array(), + additional_info: new Array(), }; - const validationResult = { errors }; if (actionParams?.subActionParams?.severity == null) { errors.severity.push(translations.SEVERITY_REQUIRED); } - return validationResult; + try { + JSON.parse(actionParams.subActionParams?.additional_info || '{}'); + } catch (error) { + errors.additional_info.push(translations.ADDITIONAL_INFO_JSON_ERROR); + } + + return { errors }; }, actionParamsFields: lazy(() => import('./servicenow_itom_params')), }; diff --git a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom_params.test.tsx b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom_params.test.tsx index cc67186790be7..ac200df8abde0 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom_params.test.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom_params.test.tsx @@ -94,6 +94,7 @@ describe('ServiceNowITOMParamsFields renders', () => { expect(wrapper.find('[data-test-subj="message_keyInput"]').exists()).toBeTruthy(); expect(wrapper.find('[data-test-subj="severitySelect"]').exists()).toBeTruthy(); expect(wrapper.find('[data-test-subj="descriptionTextArea"]').exists()).toBeTruthy(); + expect(wrapper.find('[data-test-subj="additional_infoJsonEditor"]').exists()).toBeTruthy(); }); test('If severity has errors, form row is invalid', () => { @@ -117,8 +118,24 @@ describe('ServiceNowITOMParamsFields renders', () => { mount(); expect(editAction.mock.calls[0][1]).toEqual({ message_key: '{{rule.id}}:{{alert.id}}', - additional_info: - '{"alert":{"id":"{{alert.id}}","actionGroup":"{{alert.actionGroup}}","actionSubgroup":"{{alert.actionSubgroup}}","actionGroupName":"{{alert.actionGroupName}}"},"rule":{"id":"{{rule.id}}","name":"{{rule.name}}","type":"{{rule.type}}"},"date":"{{date}}"}', + additional_info: JSON.stringify( + { + alert: { + id: '{{alert.id}}', + actionGroup: '{{alert.actionGroup}}', + actionSubgroup: '{{alert.actionSubgroup}}', + actionGroupName: '{{alert.actionGroupName}}', + }, + rule: { + id: '{{rule.id}}', + name: '{{rule.name}}', + type: '{{rule.type}}', + }, + date: '{{date}}', + }, + null, + 4 + ), }); }); @@ -140,8 +157,24 @@ describe('ServiceNowITOMParamsFields renders', () => { expect(editAction.mock.calls.length).toEqual(1); expect(editAction.mock.calls[0][1]).toEqual({ message_key: '{{rule.id}}:{{alert.id}}', - additional_info: - '{"alert":{"id":"{{alert.id}}","actionGroup":"{{alert.actionGroup}}","actionSubgroup":"{{alert.actionSubgroup}}","actionGroupName":"{{alert.actionGroupName}}"},"rule":{"id":"{{rule.id}}","name":"{{rule.name}}","type":"{{rule.type}}"},"date":"{{date}}"}', + additional_info: JSON.stringify( + { + alert: { + id: '{{alert.id}}', + actionGroup: '{{alert.actionGroup}}', + actionSubgroup: '{{alert.actionSubgroup}}', + actionGroupName: '{{alert.actionGroupName}}', + }, + rule: { + id: '{{rule.id}}', + name: '{{rule.name}}', + type: '{{rule.type}}', + }, + date: '{{date}}', + }, + null, + 4 + ), }); }); @@ -177,5 +210,15 @@ describe('ServiceNowITOMParamsFields renders', () => { expect(editAction.mock.calls[0][1][field.key]).toEqual(changeEvent.target.value); }) ); + + test('additional_info update triggers editAction correctly', () => { + const newValue = '{"foo": "bar"}' as unknown as React.ChangeEvent; + const wrapper = mount(); + const theField = wrapper.find('[data-test-subj="additional_infoJsonEditor"]').first(); + + theField.prop('onChange')!(newValue); + + expect(editAction.mock.calls[0][1].additional_info).toEqual(newValue); + }); }); }); diff --git a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom_params.tsx b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom_params.tsx index bc059fb8e592e..2518b56b97ef4 100644 --- a/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom_params.tsx +++ b/x-pack/plugins/stack_connectors/public/connector_types/servicenow_itom/servicenow_itom_params.tsx @@ -6,8 +6,11 @@ */ import React, { useCallback, useEffect, useRef, useMemo } from 'react'; -import { EuiFormRow, EuiSpacer, EuiTitle, EuiText, EuiSelect } from '@elastic/eui'; -import type { ActionParamsProps } from '@kbn/triggers-actions-ui-plugin/public'; +import { EuiFormRow, EuiSpacer, EuiTitle, EuiText, EuiSelect, EuiIconTip } from '@elastic/eui'; +import { + ActionParamsProps, + JsonEditorWithMessageVariables, +} from '@kbn/triggers-actions-ui-plugin/public'; import { TextAreaWithMessageVariables, TextFieldWithMessageVariables, @@ -34,20 +37,24 @@ const fields: Array<{ { label: i18n.MESSAGE_KEY, fieldKey: 'message_key' }, ]; -const additionalInformation = JSON.stringify({ - alert: { - id: '{{alert.id}}', - actionGroup: '{{alert.actionGroup}}', - actionSubgroup: '{{alert.actionSubgroup}}', - actionGroupName: '{{alert.actionGroupName}}', - }, - rule: { - id: '{{rule.id}}', - name: '{{rule.name}}', - type: '{{rule.type}}', +const additionalInformation = JSON.stringify( + { + alert: { + id: '{{alert.id}}', + actionGroup: '{{alert.actionGroup}}', + actionSubgroup: '{{alert.actionSubgroup}}', + actionGroupName: '{{alert.actionGroupName}}', + }, + rule: { + id: '{{rule.id}}', + name: '{{rule.name}}', + type: '{{rule.type}}', + }, + date: '{{date}}', }, - date: '{{date}}', -}); + null, + 4 +); const ServiceNowITOMParamsFields: React.FunctionComponent< ActionParamsProps @@ -57,8 +64,7 @@ const ServiceNowITOMParamsFields: React.FunctionComponent< [actionParams.subActionParams] ); - const { description, severity } = params; - + const { description, severity, additional_info: additionalInfo } = params; const { http, notifications: { toasts }, @@ -159,6 +165,38 @@ const ServiceNowITOMParamsFields: React.FunctionComponent< inputTargetValue={description ?? undefined} label={i18n.DESCRIPTION_LABEL} /> + 0 + } + > + + {i18n.ADDITIONAL_INFO} + + + } + onDocumentsChange={(json: string) => { + editSubActionProperty('additional_info', json); + }} + /> + ); }; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 6da4dc0c351b9..526bee1ed8169 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -8679,7 +8679,6 @@ "xpack.apm.agentExplorerInstanceTable.agentVersionColumnLabel.multipleVersions": "{versionsCount, plural, one {1 version} other {# versions}}", "xpack.apm.agentExplorerInstanceTable.noServiceNodeName.tooltip.linkToDocs": "Vous pouvez configurer le nom du nœud de service via {seeDocs}.", "xpack.apm.agentExplorerTable.agentVersionColumnLabel.multipleVersions": "{versionsCount, plural, one {1 version} other {# versions}}", - "xpack.apm.alertDetails.latencyAlertHistoryChart.error.toastDescription": "Une erreur s'est produite lors de la récupération des données graphiques de l'historique d'alertes de latence pour {serviceName}", "xpack.apm.alerts.anomalySeverity.scoreDetailsDescription": "score {value} {value, select, critical {} other {et plus}}", "xpack.apm.alerts.timeLabelForData": "Dernières {lookback} {timeLabel} de données, ({displayedGroups} groupes affichés sur {totalGroups}", "xpack.apm.alertTypes.errorCount.reason": "Le nombre d'erreurs est {measured} au cours des derniers/dernières {interval} pour {group}. Alerte lorsque > {threshold}.", @@ -9056,7 +9055,6 @@ "xpack.apm.aggregatedTransactions.fallback.tooltip": "Cette page utilise les données d'événements de transactions lorsqu'aucun événement d'indicateur n'a été trouvé dans la plage temporelle actuelle, ou lorsqu'un filtre a été appliqué en fonction des champs indisponibles dans les documents des événements d'indicateurs.", "xpack.apm.alertDetails.error.toastDescription": "Impossible de charger les graphiques de la page de détails d’alerte. Veuillez essayer d’actualiser la page si l’alerte vient d’être créée", "xpack.apm.alertDetails.error.toastTitle": "Une erreur s’est produite lors de l’identification de la plage temporelle de l’alerte.", - "xpack.apm.alertDetails.latencyAlertHistoryChart.error.toastTitle": "Erreur du graphique d’historique des alertes de latence", "xpack.apm.alerting.fields.environment": "Environnement", "xpack.apm.alerting.fields.error.group.id": "Clé du groupe d'erreurs", "xpack.apm.alerting.fields.service": "Service", @@ -9535,10 +9533,6 @@ "xpack.apm.labs.description": "Essayez les fonctionnalités APM qui sont en version d'évaluation technique et en cours de progression.", "xpack.apm.labs.feedbackButtonLabel": "Dites-nous ce que vous pensez !", "xpack.apm.labs.reload": "Recharger pour appliquer les modifications", - "xpack.apm.latencyChartHistory.alertsTriggered": "Alertes déclenchées", - "xpack.apm.latencyChartHistory.avgTimeToRecover": "Temps moyen de récupération", - "xpack.apm.latencyChartHistory.chartTitle": " historique des alertes de latence", - "xpack.apm.latencyChartHistory.last30days": "30 derniers jours", "xpack.apm.latencyCorrelations.licenseCheckText": "Pour utiliser les corrélations de latence, vous devez disposer d'une licence Elastic Platinum. Elle vous permettra de découvrir quels champs sont corrélés à de faibles performances.", "xpack.apm.license.button": "Commencer l'essai", "xpack.apm.license.title": "Commencer un essai gratuit de 30 jours", @@ -21094,10 +21088,8 @@ "xpack.infra.assetDetails.tabs.metadata.seeLess": "Afficher moins", "xpack.infra.assetDetails.tabs.metadata.seeMore": "+{count} de plus", "xpack.infra.assetDetails.tabs.metadata": "Métadonnées", - "xpack.infra.assetDetails.tabs.osquery": "Osquery", "xpack.infra.assetDetails.tabs.overview": "Aperçu", "xpack.infra.assetDetails.tabs.processes": "Processus", - "xpack.infra.assetDetails.tabs.profiling": "Universal Profiling", "xpack.infra.homePage.toolbar.showingLastOneMinuteDataText": "Dernières {duration} de données pour l'heure sélectionnée", "xpack.infra.hostsViewPage.errorOnCreateOrLoadDataview": "Une erreur s'est produite lors de la création d'une vue de données : {metricAlias}. Essayez de recharger la page.", "xpack.infra.hostsViewPage.kpi.subtitle.average.limit": "Moyenne (de {limit} hôtes)", @@ -21189,8 +21181,6 @@ "xpack.infra.waffle.customMetrics.editMode.deleteAriaLabel": "Supprimer l'indicateur personnalisé pour {name}", "xpack.infra.waffle.customMetrics.editMode.editButtonAriaLabel": "Modifier l'indicateur personnalisé pour {name}", "xpack.infra.waffle.unableToSelectGroupErrorMessage": "Impossible de sélectionner les options de regroupement pour {nodeType}", - "xpack.infra.alertDetails.logsAlertHistoryChart.error.toastDescription": "Une erreur s’est produite lors de la récupération des données graphiques de l’historique d’alertes de logs", - "xpack.infra.alertDetails.logsAlertHistoryChart.error.toastTitle": "Erreur graphique dans l’historique d’alertes de logs", "xpack.infra.alerting.alertDropdownTitle": "Alertes et règles", "xpack.infra.alerting.alertFlyout.groupBy.placeholder": "Rien (non groupé)", "xpack.infra.alerting.alertFlyout.groupByLabel": "Regrouper par", @@ -21418,10 +21408,6 @@ "xpack.infra.logEntryExampleMessageHeaders.logColumnHeader.messageLabel": "Message", "xpack.infra.logs.alertDetails.chart.ratioTitle": "Ratio de Requête A à Requête B", "xpack.infra.logs.alertDetails.chartAnnotation.alertStarted": "Alerte démarrée", - "xpack.infra.logs.alertDetails.chartHistory.alertsTriggered": "Alertes déclenchées", - "xpack.infra.logs.alertDetails.chartHistory.avgTimeToRecover": "Temps moyen de récupération", - "xpack.infra.logs.alertDetails.chartHistory.chartTitle": "Historique des alertes de seuil de logs", - "xpack.infra.logs.alertDetails.chartHistory.last30days": "30 derniers jours", "xpack.infra.logs.alertDetails.logRateAnalysis.sectionTitle": "Analyse du taux de log", "xpack.infra.logs.alertDetails.logRateAnalysisTitle": "Causes possibles et résolutions", "xpack.infra.logs.alertDropdown.inlineLogViewCreateAlertContent": "La création d'alertes n'est pas prise en charge avec les vues de log en ligne.", @@ -24112,7 +24098,6 @@ "xpack.logsExplorer.dataTable.header.popover.resource": "Ressource", "xpack.logsExplorer.dataTable.header.resource.tooltip.paragraph": "Les champs fournissant des informations sur la source du document, comme :", "xpack.logsExplorer.flyoutDetail.title": "Détails du log", - "xpack.logsExplorer.grid.closePopover": "Fermer la fenêtre contextuelle", "xpack.logsExplorer.popoverAction.closePopover": "Fermer la fenêtre contextuelle", "xpack.logsExplorer.popoverAction.copyValue": "Copier la valeur", "xpack.logsExplorer.popoverAction.filterFor": "Filtrer sur", @@ -30032,12 +30017,6 @@ "xpack.observability.customThreshold.alertChartTitle": "Résultat de l'équation pour ", "xpack.observability.customThreshold.alertDetails.logRateAnalysis.sectionTitle": "Analyse du taux de log", "xpack.observability.customThreshold.alertDetails.logRateAnalysisTitle": "Causes possibles et résolutions", - "xpack.observability.customThreshold.alertHistory.alertsTriggered": "Alertes déclenchées", - "xpack.observability.customThreshold.alertHistory.avgTimeToRecover": "Temps moyen de récupération", - "xpack.observability.customThreshold.alertHistory.chartTitle": "Historique des alertes", - "xpack.observability.customThreshold.alertHistory.error.toastDescription": "Une erreur s'est produite lors de la récupération des données graphiques de l'historique des alertes", - "xpack.observability.customThreshold.alertHistory.error.toastTitle": "Erreur lors de la récupération des données graphiques de l'historique des alertes", - "xpack.observability.customThreshold.alertHistory.last30days": "30 derniers jours", "xpack.observability.customThreshold.rule..charts.error_equation.description": "Vérifiez l'équation de la règle.", "xpack.observability.customThreshold.rule..charts.error_equation.title": "Une erreur s'est produite lors de l'affichage du graphique", "xpack.observability.customThreshold.rule..charts.errorMessage": "Oups, un problème est survenu", @@ -44937,7 +44916,6 @@ "xpack.features.savedQueryManagementFeatureName": "Gestion des requêtes enregistrées", "xpack.features.savedQueryManagementTooltip": "Si \"All\" (Tout) est défini, les requêtes enregistrées peuvent être gérées grâce à Kibana dans toutes les applications compatibles. Si \"None\" est défini, les privilèges relatifs aux requêtes enregistrées sont fixés indépendamment pour chaque application.", "xpack.features.visualizeFeatureName": "Bibliothèque Visualize", - "xpack.metricsData.assetDetails.formulas.cpuUsage": "Utilisation CPU", "xpack.metricsData.assetDetails.formulas.cpuUsage.iowaitLabel": "iowait", "xpack.metricsData.assetDetails.formulas.cpuUsage.irqLabel": "irq", "xpack.metricsData.assetDetails.formulas.cpuUsage.niceLabel": "nice", @@ -44945,45 +44923,25 @@ "xpack.metricsData.assetDetails.formulas.cpuUsage.stealLabel": "steal", "xpack.metricsData.assetDetails.formulas.cpuUsage.systemLabel": "system", "xpack.metricsData.assetDetails.formulas.cpuUsage.userLabel": "utilisateur", - "xpack.metricsData.assetDetails.formulas.diskIORead": "Entrées et sorties par seconde en lecture sur le disque", - "xpack.metricsData.assetDetails.formulas.diskIOWrite": "Entrées et sorties par seconde en écriture sur le disque", - "xpack.metricsData.assetDetails.formulas.diskReadThroughput": "Rendement de lecture du disque", - "xpack.metricsData.assetDetails.formulas.diskSpaceAvailability": "Disponibilité de l'espace disque", - "xpack.metricsData.assetDetails.formulas.diskSpaceAvailable": "Espace disque disponible", - "xpack.metricsData.assetDetails.formulas.diskUsage": "Utilisation du disque", - "xpack.metricsData.assetDetails.formulas.diskWriteThroughput": "Rendement d’écriture du disque", "xpack.metricsData.assetDetails.formulas.hostCount.hostsLabel": "Hôtes", "xpack.metricsData.assetDetails.formulas.kubernetes.capacity": "Capacité", "xpack.metricsData.assetDetails.formulas.kubernetes.used": "Utilisé", - "xpack.metricsData.assetDetails.formulas.load15m": "Charge (15 min)", - "xpack.metricsData.assetDetails.formulas.load1m": "Charge (1 min)", - "xpack.metricsData.assetDetails.formulas.load5m": "Charge (5 min)", "xpack.metricsData.assetDetails.formulas.logRate": "Taux de log", - "xpack.metricsData.assetDetails.formulas.memoryFree": "Sans mémoire", - "xpack.metricsData.assetDetails.formulas.memoryUsage": "Utilisation mémoire", "xpack.metricsData.assetDetails.formulas.metric.label.cache": "cache", "xpack.metricsData.assetDetails.formulas.metric.label.free": "gratuit", "xpack.metricsData.assetDetails.formulas.metric.label.used": "utilisé", - "xpack.metricsData.assetDetails.formulas.normalizedLoad1m": "Charge normalisée", "xpack.metricsData.assetDetails.formulas.rx": "Réseau entrant (RX)", "xpack.metricsData.assetDetails.formulas.tx": "Réseau sortant (TX)", - "xpack.metricsData.assetDetails.metricsCharts.cpuUsage": "Utilisation CPU", - "xpack.metricsData.assetDetails.metricsCharts.diskIOPS": "Entrées et sorties par seconde (IOPS) sur le disque", - "xpack.metricsData.assetDetails.metricsCharts.diskThroughput": "Rendement du disque", "xpack.metricsData.assetDetails.metricsCharts.diskUsage.label.used": "Utilisé", - "xpack.metricsData.assetDetails.metricsCharts.diskUsageByMountingPoint": "Utilisation du disque par point de montage", "xpack.metricsData.assetDetails.metricsCharts.kubernetes.nodeCpuCapacity": "Capacité CPU du nœud", "xpack.metricsData.assetDetails.metricsCharts.kubernetes.nodeDiskCapacity": "Capacité du disque du nœud", "xpack.metricsData.assetDetails.metricsCharts.kubernetes.nodeMemoryCapacity": "Capacité de mémoire du nœud", "xpack.metricsData.assetDetails.metricsCharts.kubernetes.nodePodCapacity": "Capacité de pod du nœud", - "xpack.metricsData.assetDetails.metricsCharts.load": "Charge", - "xpack.metricsData.assetDetails.metricsCharts.memoryUsage": "Utilisation mémoire", "xpack.metricsData.assetDetails.metricsCharts.metric.label.cache": "Cache", "xpack.metricsData.assetDetails.metricsCharts.metric.label.free": "Gratuit", "xpack.metricsData.assetDetails.metricsCharts.metric.label.read": "Lire", "xpack.metricsData.assetDetails.metricsCharts.metric.label.used": "Utilisé", "xpack.metricsData.assetDetails.metricsCharts.metric.label.write": "Écrire", - "xpack.metricsData.assetDetails.metricsCharts.network": "Réseau", "xpack.metricsData.assetDetails.metricsCharts.network.label.rx": "Entrant (RX)", "xpack.metricsData.assetDetails.metricsCharts.network.label.tx": "Sortant (TX)", "xpack.metricsData.hostsPage.goToMetricsSettings": "Vérifier les paramètres", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index 16e0f347d7651..e7c5c729dcd78 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -8666,7 +8666,6 @@ "xpack.apm.agentExplorerInstanceTable.agentVersionColumnLabel.multipleVersions": "{versionsCount, plural, one {1バージョン} other {# バージョン}}", "xpack.apm.agentExplorerInstanceTable.noServiceNodeName.tooltip.linkToDocs": "{seeDocs}を使用してサービスノード名を構成できます。", "xpack.apm.agentExplorerTable.agentVersionColumnLabel.multipleVersions": "{versionsCount, plural, one {1バージョン} other {# バージョン}}", - "xpack.apm.alertDetails.latencyAlertHistoryChart.error.toastDescription": "{serviceName}のレイテンシアラート履歴グラフデータを取得するときに、エラーが発生しました。", "xpack.apm.alerts.anomalySeverity.scoreDetailsDescription": "スコア {value} {value, select, critical {} other {以上}}", "xpack.apm.alerts.timeLabelForData": "過去{lookback} {timeLabel}のデータ({displayedGroups}/{totalGroups}個のグループを表示)", "xpack.apm.alertTypes.minimumWindowSize.description": "推奨される最小値は{sizeValue} {sizeUnit}です。これにより、アラートに評価する十分なデータがあることが保証されます。低すぎる値を選択した場合、アラートが想定通りに実行されない可能性があります。", @@ -9037,7 +9036,6 @@ "xpack.apm.aggregatedTransactions.fallback.tooltip": "メトリックイベントが現在の時間範囲にないか、メトリックイベントドキュメントにないフィールドに基づいてフィルターが適用されたため、このページはトランザクションイベントデータを使用しています。", "xpack.apm.alertDetails.error.toastDescription": "アラート詳細ページのグラフを読み込めません。アラートが新しく作成された場合は、ページを更新してください", "xpack.apm.alertDetails.error.toastTitle": "アラート時間範囲を特定するときにエラーが発生しました。", - "xpack.apm.alertDetails.latencyAlertHistoryChart.error.toastTitle": "レイテンシアラート履歴グラフエラー", "xpack.apm.alerting.fields.environment": "環境", "xpack.apm.alerting.fields.error.group.id": "エラーグループキー", "xpack.apm.alerting.fields.service": "サービス", @@ -9516,10 +9514,6 @@ "xpack.apm.labs.description": "現在テクニカルプレビュー中のAPM機能をお試しください。", "xpack.apm.labs.feedbackButtonLabel": "ご意見をお聞かせください。", "xpack.apm.labs.reload": "変更を適用するには、再読み込みしてください", - "xpack.apm.latencyChartHistory.alertsTriggered": "アラートがトリガーされました", - "xpack.apm.latencyChartHistory.avgTimeToRecover": "回復までの平均時間", - "xpack.apm.latencyChartHistory.chartTitle": " レイテンシアラート履歴", - "xpack.apm.latencyChartHistory.last30days": "過去30日間", "xpack.apm.latencyCorrelations.licenseCheckText": "遅延の相関関係を使用するには、Elastic Platinumライセンスのサブスクリプションが必要です。使用すると、パフォーマンスの低下に関連しているフィールドを検出できます。", "xpack.apm.license.button": "トライアルを開始", "xpack.apm.license.title": "無料の 30 日トライアルを開始", @@ -21152,8 +21146,6 @@ "xpack.infra.waffle.customMetrics.editMode.deleteAriaLabel": "{name} のカスタムメトリックを削除", "xpack.infra.waffle.customMetrics.editMode.editButtonAriaLabel": "{name} のカスタムメトリックを編集", "xpack.infra.waffle.unableToSelectGroupErrorMessage": "{nodeType} のオプションでグループを選択できません", - "xpack.infra.alertDetails.logsAlertHistoryChart.error.toastDescription": "ログアラート履歴グラフデータを取得するときに、エラーが発生しました。", - "xpack.infra.alertDetails.logsAlertHistoryChart.error.toastTitle": "ログアラート履歴グラフエラー", "xpack.infra.alerting.alertDropdownTitle": "アラートとルール", "xpack.infra.alerting.alertFlyout.groupBy.placeholder": "なし(グループなし)", "xpack.infra.alerting.alertFlyout.groupByLabel": "グループ分けの条件", @@ -21236,10 +21228,8 @@ "xpack.infra.assetDetails.tabs.metadata.seeLess": "簡易表示", "xpack.infra.assetDetails.tabs.metadata.seeMore": "他 {count} 件", "xpack.infra.assetDetails.tabs.metadata": "メタデータ", - "xpack.infra.assetDetails.tabs.osquery": "Osquery", "xpack.infra.assetDetails.tabs.overview": "概要", "xpack.infra.assetDetails.tabs.processes": "プロセス", - "xpack.infra.assetDetails.tabs.profiling": "ユニバーサルプロファイリング", "xpack.infra.assetDetails.tooltip.activeAlertsExplanation": "アクティブアラート", "xpack.infra.bottomDrawer.kubernetesDashboardsLink": "Kubernetesダッシュボード", "xpack.infra.chartSection.missingMetricDataBody": "このチャートはデータが欠けています。", @@ -21392,10 +21382,6 @@ "xpack.infra.logEntryExampleMessageHeaders.logColumnHeader.messageLabel": "メッセージ", "xpack.infra.logs.alertDetails.chart.ratioTitle": "クエリAとクエリBの比率", "xpack.infra.logs.alertDetails.chartAnnotation.alertStarted": "アラートが開始しました", - "xpack.infra.logs.alertDetails.chartHistory.alertsTriggered": "アラートがトリガーされました", - "xpack.infra.logs.alertDetails.chartHistory.avgTimeToRecover": "回復までの平均時間", - "xpack.infra.logs.alertDetails.chartHistory.chartTitle": "ログしきい値アラート履歴", - "xpack.infra.logs.alertDetails.chartHistory.last30days": "過去30日間", "xpack.infra.logs.alertDetails.logRateAnalysis.sectionTitle": "ログレート分析", "xpack.infra.logs.alertDetails.logRateAnalysisTitle": "考えられる原因と修正方法", "xpack.infra.logs.alertDropdown.inlineLogViewCreateAlertContent": "インラインログビューではアラートの作成がサポートされていません", @@ -24087,7 +24073,6 @@ "xpack.logsExplorer.dataTable.header.popover.resource": "リソース", "xpack.logsExplorer.dataTable.header.resource.tooltip.paragraph": "次のようなドキュメントのソースに関する情報を提供するフィールド:", "xpack.logsExplorer.flyoutDetail.title": "ログの詳細", - "xpack.logsExplorer.grid.closePopover": "ポップオーバーを閉じる", "xpack.logsExplorer.popoverAction.closePopover": "ポップオーバーを閉じる", "xpack.logsExplorer.popoverAction.copyValue": "値をコピー", "xpack.logsExplorer.popoverAction.filterFor": "フィルター", @@ -30004,12 +29989,6 @@ "xpack.observability.customThreshold.alertChartTitle": "式の結果 ", "xpack.observability.customThreshold.alertDetails.logRateAnalysis.sectionTitle": "ログレート分析", "xpack.observability.customThreshold.alertDetails.logRateAnalysisTitle": "考えられる原因と修正方法", - "xpack.observability.customThreshold.alertHistory.alertsTriggered": "アラートがトリガーされました", - "xpack.observability.customThreshold.alertHistory.avgTimeToRecover": "回復までの平均時間", - "xpack.observability.customThreshold.alertHistory.chartTitle": "アラート履歴", - "xpack.observability.customThreshold.alertHistory.error.toastDescription": "アラート履歴グラフデータを取得するときに、エラーが発生しました", - "xpack.observability.customThreshold.alertHistory.error.toastTitle": "アラート履歴グラフエラー", - "xpack.observability.customThreshold.alertHistory.last30days": "過去30日間", "xpack.observability.customThreshold.rule..charts.error_equation.description": "ルール式を確認してください。", "xpack.observability.customThreshold.rule..charts.error_equation.title": "グラフの表示中にエラーが発生しました", "xpack.observability.customThreshold.rule..charts.errorMessage": "問題が発生しました", @@ -44907,7 +44886,6 @@ "xpack.features.savedQueryManagementFeatureName": "保存されたクエリ管理", "xpack.features.savedQueryManagementTooltip": "[すべて]に設定すると、保存されたクエリは、クエリをサポートするすべてのアプリケーションのKibana全体で管理できます。[なし]に設定すると、保存されたクエリ権限は各アプリケーションで独自に決定されます。", "xpack.features.visualizeFeatureName": "Visualizeライブラリ", - "xpack.metricsData.assetDetails.formulas.cpuUsage": "CPU使用状況", "xpack.metricsData.assetDetails.formulas.cpuUsage.iowaitLabel": "iowait", "xpack.metricsData.assetDetails.formulas.cpuUsage.irqLabel": "irq", "xpack.metricsData.assetDetails.formulas.cpuUsage.niceLabel": "nice", @@ -44915,45 +44893,25 @@ "xpack.metricsData.assetDetails.formulas.cpuUsage.stealLabel": "steal", "xpack.metricsData.assetDetails.formulas.cpuUsage.systemLabel": "システム", "xpack.metricsData.assetDetails.formulas.cpuUsage.userLabel": "ユーザー", - "xpack.metricsData.assetDetails.formulas.diskIORead": "ディスク読み取りIOPS", - "xpack.metricsData.assetDetails.formulas.diskIOWrite": "ディスク書き込みIOPS", - "xpack.metricsData.assetDetails.formulas.diskReadThroughput": "ディスク読み取りスループット", - "xpack.metricsData.assetDetails.formulas.diskSpaceAvailability": "空きディスク容量", - "xpack.metricsData.assetDetails.formulas.diskSpaceAvailable": "空きディスク容量", - "xpack.metricsData.assetDetails.formulas.diskUsage": "ディスク使用量", - "xpack.metricsData.assetDetails.formulas.diskWriteThroughput": "ディスク書き込みスループット", "xpack.metricsData.assetDetails.formulas.hostCount.hostsLabel": "ホスト", "xpack.metricsData.assetDetails.formulas.kubernetes.capacity": "容量", "xpack.metricsData.assetDetails.formulas.kubernetes.used": "使用中", - "xpack.metricsData.assetDetails.formulas.load15m": "読み込み(15m)", - "xpack.metricsData.assetDetails.formulas.load1m": "読み込み(1m)", - "xpack.metricsData.assetDetails.formulas.load5m": "読み込み(5m)", "xpack.metricsData.assetDetails.formulas.logRate": "ログレート", - "xpack.metricsData.assetDetails.formulas.memoryFree": "空きメモリー", - "xpack.metricsData.assetDetails.formulas.memoryUsage": "メモリー使用状況", "xpack.metricsData.assetDetails.formulas.metric.label.cache": "キャッシュ", "xpack.metricsData.assetDetails.formulas.metric.label.free": "空き", "xpack.metricsData.assetDetails.formulas.metric.label.used": "使用中", - "xpack.metricsData.assetDetails.formulas.normalizedLoad1m": "正規化された負荷", "xpack.metricsData.assetDetails.formulas.rx": "ネットワーク受信(RX)", "xpack.metricsData.assetDetails.formulas.tx": "ネットワーク送信(TX)", - "xpack.metricsData.assetDetails.metricsCharts.cpuUsage": "CPU使用状況", - "xpack.metricsData.assetDetails.metricsCharts.diskIOPS": "Disk IOPS", - "xpack.metricsData.assetDetails.metricsCharts.diskThroughput": "Disk Throughput", "xpack.metricsData.assetDetails.metricsCharts.diskUsage.label.used": "使用中", - "xpack.metricsData.assetDetails.metricsCharts.diskUsageByMountingPoint": "マウントポイント別ディスク使用量", "xpack.metricsData.assetDetails.metricsCharts.kubernetes.nodeCpuCapacity": "ノード CPU 処理能力", "xpack.metricsData.assetDetails.metricsCharts.kubernetes.nodeDiskCapacity": "ノードディスク容量", "xpack.metricsData.assetDetails.metricsCharts.kubernetes.nodeMemoryCapacity": "ノードメモリー容量", "xpack.metricsData.assetDetails.metricsCharts.kubernetes.nodePodCapacity": "ノードポッド容量", - "xpack.metricsData.assetDetails.metricsCharts.load": "読み込み", - "xpack.metricsData.assetDetails.metricsCharts.memoryUsage": "メモリー使用状況", "xpack.metricsData.assetDetails.metricsCharts.metric.label.cache": "キャッシュ", "xpack.metricsData.assetDetails.metricsCharts.metric.label.free": "空き", "xpack.metricsData.assetDetails.metricsCharts.metric.label.read": "読み取り", "xpack.metricsData.assetDetails.metricsCharts.metric.label.used": "使用中", "xpack.metricsData.assetDetails.metricsCharts.metric.label.write": "書き込み", - "xpack.metricsData.assetDetails.metricsCharts.network": "ネットワーク", "xpack.metricsData.assetDetails.metricsCharts.network.label.rx": "受信(RX)", "xpack.metricsData.assetDetails.metricsCharts.network.label.tx": "送信(TX)", "xpack.metricsData.hostsPage.goToMetricsSettings": "設定を確認", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index 6dfeeede1b040..b33c76617db9e 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -8682,7 +8682,6 @@ "xpack.apm.agentExplorerInstanceTable.agentVersionColumnLabel.multipleVersions": "{versionsCount, plural, one {1 个版本} other {# 个版本}}", "xpack.apm.agentExplorerInstanceTable.noServiceNodeName.tooltip.linkToDocs": "您可以通过 {seeDocs} 配置服务节点名称。", "xpack.apm.agentExplorerTable.agentVersionColumnLabel.multipleVersions": "{versionsCount, plural, one {1 个版本} other {# 个版本}}", - "xpack.apm.alertDetails.latencyAlertHistoryChart.error.toastDescription": "提取 {serviceName} 的延迟告警历史记录图表数据时出错", "xpack.apm.alerts.anomalySeverity.scoreDetailsDescription": "分数 {value} {value, select, critical {} other {及以上}}", "xpack.apm.alerts.timeLabelForData": "过去 {lookback} {timeLabel}的数据,显示{displayedGroups}/{totalGroups} 个组", "xpack.apm.alertTypes.errorCount.reason": "对于 {group},过去 {interval}的错误计数为 {measured}。超出 {threshold} 时告警。", @@ -9059,7 +9058,6 @@ "xpack.apm.aggregatedTransactions.fallback.tooltip": "此页面正在使用事务事件数据,因为当前时间范围内未找到任何指标事件,或者已根据指标事件文档中不可用的字段应用了筛选。", "xpack.apm.alertDetails.error.toastDescription": "无法加载告警详情页面的图表。如果告警为新建告警,请尝试刷新该页面", "xpack.apm.alertDetails.error.toastTitle": "识别告警时间范围时出错。", - "xpack.apm.alertDetails.latencyAlertHistoryChart.error.toastTitle": "延迟告警历史记录图表错误", "xpack.apm.alerting.fields.environment": "环境", "xpack.apm.alerting.fields.error.group.id": "错误分组密钥", "xpack.apm.alerting.fields.service": "服务", @@ -9538,10 +9536,6 @@ "xpack.apm.labs.description": "试用正处于技术预览状态和开发中的 APM 功能。", "xpack.apm.labs.feedbackButtonLabel": "告诉我们您的看法!", "xpack.apm.labs.reload": "重新加载以应用更改", - "xpack.apm.latencyChartHistory.alertsTriggered": "已触发告警", - "xpack.apm.latencyChartHistory.avgTimeToRecover": "恢复的平均时间", - "xpack.apm.latencyChartHistory.chartTitle": " 延迟告警历史记录", - "xpack.apm.latencyChartHistory.last30days": "过去 30 天", "xpack.apm.latencyCorrelations.licenseCheckText": "要使用延迟相关性,必须订阅 Elastic 白金级许可证。使用相关性,将能够发现哪些字段与性能差相关。", "xpack.apm.license.button": "开始试用", "xpack.apm.license.title": "开始为期 30 天的免费试用", @@ -21100,10 +21094,8 @@ "xpack.infra.assetDetails.tabs.metadata.seeLess": "显示更少", "xpack.infra.assetDetails.tabs.metadata.seeMore": "另外 {count} 个", "xpack.infra.assetDetails.tabs.metadata": "元数据", - "xpack.infra.assetDetails.tabs.osquery": "Osquery", "xpack.infra.assetDetails.tabs.overview": "概览", "xpack.infra.assetDetails.tabs.processes": "进程", - "xpack.infra.assetDetails.tabs.profiling": "Universal Profiling", "xpack.infra.homePage.toolbar.showingLastOneMinuteDataText": "选定时间过去 {duration}的数据", "xpack.infra.hostsViewPage.errorOnCreateOrLoadDataview": "尝试创建数据视图时出错:{metricAlias}。尝试重新加载该页面。", "xpack.infra.hostsViewPage.kpi.subtitle.average.limit": "平均值(属于 {limit} 台主机)", @@ -21195,8 +21187,6 @@ "xpack.infra.waffle.customMetrics.editMode.deleteAriaLabel": "删除 {name} 的定制指标", "xpack.infra.waffle.customMetrics.editMode.editButtonAriaLabel": "编辑 {name} 的定制指标", "xpack.infra.waffle.unableToSelectGroupErrorMessage": "无法选择 {nodeType} 的分组依据选项", - "xpack.infra.alertDetails.logsAlertHistoryChart.error.toastDescription": "提取日志告警历史记录图表数据时出错", - "xpack.infra.alertDetails.logsAlertHistoryChart.error.toastTitle": "日志告警历史记录图表错误", "xpack.infra.alerting.alertDropdownTitle": "告警和规则", "xpack.infra.alerting.alertFlyout.groupBy.placeholder": "无内容(未分组)", "xpack.infra.alerting.alertFlyout.groupByLabel": "分组依据", @@ -21424,10 +21414,6 @@ "xpack.infra.logEntryExampleMessageHeaders.logColumnHeader.messageLabel": "消息", "xpack.infra.logs.alertDetails.chart.ratioTitle": "查询 A 到查询 B 的比率", "xpack.infra.logs.alertDetails.chartAnnotation.alertStarted": "已启动告警", - "xpack.infra.logs.alertDetails.chartHistory.alertsTriggered": "已触发告警", - "xpack.infra.logs.alertDetails.chartHistory.avgTimeToRecover": "恢复的平均时间", - "xpack.infra.logs.alertDetails.chartHistory.chartTitle": "日志阈值告警历史记录", - "xpack.infra.logs.alertDetails.chartHistory.last30days": "过去 30 天", "xpack.infra.logs.alertDetails.logRateAnalysis.sectionTitle": "日志速率分析", "xpack.infra.logs.alertDetails.logRateAnalysisTitle": "可能的原因和补救措施", "xpack.infra.logs.alertDropdown.inlineLogViewCreateAlertContent": "不支持通过内联日志视图创建告警", @@ -24120,7 +24106,6 @@ "xpack.logsExplorer.dataTable.header.popover.resource": "资源", "xpack.logsExplorer.dataTable.header.resource.tooltip.paragraph": "提供有关文档来源信息的字段,例如:", "xpack.logsExplorer.flyoutDetail.title": "日志详情", - "xpack.logsExplorer.grid.closePopover": "关闭弹出框", "xpack.logsExplorer.popoverAction.closePopover": "关闭弹出框", "xpack.logsExplorer.popoverAction.copyValue": "复制值", "xpack.logsExplorer.popoverAction.filterFor": "筛留", @@ -30044,12 +30029,6 @@ "xpack.observability.customThreshold.alertChartTitle": "方程结果用于 ", "xpack.observability.customThreshold.alertDetails.logRateAnalysis.sectionTitle": "日志速率分析", "xpack.observability.customThreshold.alertDetails.logRateAnalysisTitle": "可能的原因和补救措施", - "xpack.observability.customThreshold.alertHistory.alertsTriggered": "已触发告警", - "xpack.observability.customThreshold.alertHistory.avgTimeToRecover": "恢复的平均时间", - "xpack.observability.customThreshold.alertHistory.chartTitle": "告警历史记录", - "xpack.observability.customThreshold.alertHistory.error.toastDescription": "提取告警历史记录图表数据时出错", - "xpack.observability.customThreshold.alertHistory.error.toastTitle": "告警历史记录图表错误", - "xpack.observability.customThreshold.alertHistory.last30days": "过去 30 天", "xpack.observability.customThreshold.rule..charts.error_equation.description": "检查规则方程。", "xpack.observability.customThreshold.rule..charts.error_equation.title": "渲染图表时出错", "xpack.observability.customThreshold.rule..charts.errorMessage": "哇哦,出问题了", @@ -44955,7 +44934,6 @@ "xpack.features.savedQueryManagementFeatureName": "已保存查询管理", "xpack.features.savedQueryManagementTooltip": "如果设置为“全部”,可以在支持已保存查询的所有应用程序中管理整个 Kibana 中的已保存查询。如果设置为“无”,将由每个应用程序单独确定已保存查询权限。", "xpack.features.visualizeFeatureName": "Visualize 库", - "xpack.metricsData.assetDetails.formulas.cpuUsage": "CPU 使用率", "xpack.metricsData.assetDetails.formulas.cpuUsage.iowaitLabel": "iowait", "xpack.metricsData.assetDetails.formulas.cpuUsage.irqLabel": "irq", "xpack.metricsData.assetDetails.formulas.cpuUsage.niceLabel": "nice", @@ -44963,45 +44941,25 @@ "xpack.metricsData.assetDetails.formulas.cpuUsage.stealLabel": "steal", "xpack.metricsData.assetDetails.formulas.cpuUsage.systemLabel": "system", "xpack.metricsData.assetDetails.formulas.cpuUsage.userLabel": "用户", - "xpack.metricsData.assetDetails.formulas.diskIORead": "磁盘读取 IOPS", - "xpack.metricsData.assetDetails.formulas.diskIOWrite": "磁盘写入 IOPS", - "xpack.metricsData.assetDetails.formulas.diskReadThroughput": "磁盘读取吞吐量", - "xpack.metricsData.assetDetails.formulas.diskSpaceAvailability": "磁盘空间可用性", - "xpack.metricsData.assetDetails.formulas.diskSpaceAvailable": "可用磁盘空间", - "xpack.metricsData.assetDetails.formulas.diskUsage": "磁盘使用率", - "xpack.metricsData.assetDetails.formulas.diskWriteThroughput": "磁盘写入吞吐量", "xpack.metricsData.assetDetails.formulas.hostCount.hostsLabel": "主机", "xpack.metricsData.assetDetails.formulas.kubernetes.capacity": "容量", "xpack.metricsData.assetDetails.formulas.kubernetes.used": "已使用", - "xpack.metricsData.assetDetails.formulas.load15m": "负载(15 分钟)", - "xpack.metricsData.assetDetails.formulas.load1m": "负载(1 分钟)", - "xpack.metricsData.assetDetails.formulas.load5m": "负载(5 分钟)", "xpack.metricsData.assetDetails.formulas.logRate": "日志速率", - "xpack.metricsData.assetDetails.formulas.memoryFree": "可用内存", - "xpack.metricsData.assetDetails.formulas.memoryUsage": "内存利用率", "xpack.metricsData.assetDetails.formulas.metric.label.cache": "缓存", "xpack.metricsData.assetDetails.formulas.metric.label.free": "可用", "xpack.metricsData.assetDetails.formulas.metric.label.used": "已使用", - "xpack.metricsData.assetDetails.formulas.normalizedLoad1m": "标准化负载", "xpack.metricsData.assetDetails.formulas.rx": "网络入站数据 (RX)", "xpack.metricsData.assetDetails.formulas.tx": "网络出站数据 (TX)", - "xpack.metricsData.assetDetails.metricsCharts.cpuUsage": "CPU 使用率", - "xpack.metricsData.assetDetails.metricsCharts.diskIOPS": "磁盘 IOPS", - "xpack.metricsData.assetDetails.metricsCharts.diskThroughput": "磁盘吞吐量", "xpack.metricsData.assetDetails.metricsCharts.diskUsage.label.used": "已使用", - "xpack.metricsData.assetDetails.metricsCharts.diskUsageByMountingPoint": "磁盘使用率(按装载点)", "xpack.metricsData.assetDetails.metricsCharts.kubernetes.nodeCpuCapacity": "节点 CPU 容量", "xpack.metricsData.assetDetails.metricsCharts.kubernetes.nodeDiskCapacity": "节点磁盘容量", "xpack.metricsData.assetDetails.metricsCharts.kubernetes.nodeMemoryCapacity": "节点内存容量", "xpack.metricsData.assetDetails.metricsCharts.kubernetes.nodePodCapacity": "节点 Pod 容量", - "xpack.metricsData.assetDetails.metricsCharts.load": "加载", - "xpack.metricsData.assetDetails.metricsCharts.memoryUsage": "内存利用率", "xpack.metricsData.assetDetails.metricsCharts.metric.label.cache": "缓存", "xpack.metricsData.assetDetails.metricsCharts.metric.label.free": "可用", "xpack.metricsData.assetDetails.metricsCharts.metric.label.read": "读取", "xpack.metricsData.assetDetails.metricsCharts.metric.label.used": "已使用", "xpack.metricsData.assetDetails.metricsCharts.metric.label.write": "写入", - "xpack.metricsData.assetDetails.metricsCharts.network": "网络", "xpack.metricsData.assetDetails.metricsCharts.network.label.rx": "入站 (RX)", "xpack.metricsData.assetDetails.metricsCharts.network.label.tx": "出站 (TX)", "xpack.metricsData.hostsPage.goToMetricsSettings": "检查设置", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/alert_summary_widget.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/alert_summary_widget.tsx index 8702cc50910c8..3e6b379934398 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/alert_summary_widget.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/alert_summary_widget.tsx @@ -24,6 +24,7 @@ export const AlertSummaryWidget = ({ onClick = () => {}, timeRange, hideChart, + hideStats, onLoaded, dependencies: { charts }, }: AlertSummaryWidgetProps & AlertSummaryWidgetDependencies) => { @@ -63,6 +64,7 @@ export const AlertSummaryWidget = ({ dateFormat={timeRange.dateFormat} recoveredAlertCount={recoveredAlertCount} hideChart={hideChart} + hideStats={hideStats} dependencyProps={dependencyProps} /> ) : null diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_compact.stories.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_compact.stories.tsx index 9d8eb92fad8f4..9f9b71b209772 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_compact.stories.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_compact.stories.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { LIGHT_THEME } from '@elastic/charts'; import { action } from '@storybook/addon-actions'; import { AlertSummaryWidgetCompact as Component } from './alert_summary_widget_compact'; import { mockedAlertSummaryResponse, mockedChartProps } from '../../../mock/alert_summary_widget'; @@ -20,5 +21,9 @@ export const Compact = { chartProps: mockedChartProps, timeRangeTitle: 'Last 30 days', onClick: action('clicked'), + dependencyProps: { + baseTheme: LIGHT_THEME, + sparklineTheme: {}, + }, }, }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_full_size.stories.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_full_size.stories.tsx index 66cfb13918606..df8a4d1d247ac 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_full_size.stories.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_full_size.stories.tsx @@ -5,6 +5,7 @@ * 2.0. */ +import { LIGHT_THEME } from '@elastic/charts'; import { action } from '@storybook/addon-actions'; import { AlertSummaryWidgetFullSize as Component } from './alert_summary_widget_full_size'; import { mockedAlertSummaryResponse, mockedChartProps } from '../../../mock/alert_summary_widget'; @@ -18,9 +19,13 @@ export const FullSize = { args: { ...mockedAlertSummaryResponse, hideChart: false, + hideStats: false, chartProps: { ...mockedChartProps, onBrushEnd: action('brushEvent'), }, + dependencyProps: { + baseTheme: LIGHT_THEME, + }, }, }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_full_size.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_full_size.test.tsx index 312f4016321d9..0f9a7fae4f3a1 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_full_size.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_full_size.test.tsx @@ -75,4 +75,15 @@ describe('AlertSummaryWidgetFullSize', () => { alertSummaryWidget.queryByTestId('alertSummaryWidgetFullSizeChartContainer') ).not.toBeInTheDocument(); }); + + it('should render AlertSummaryWidgetFullSize without stats', async () => { + const alertSummaryWidget = renderComponent({ + hideStats: true, + }); + + expect(alertSummaryWidget.queryByTestId('alertSummaryWidgetFullSize')).toBeTruthy(); + expect( + alertSummaryWidget.queryByTestId('alertSummaryWidgetFullSizeStats') + ).not.toBeInTheDocument(); + }); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_full_size.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_full_size.tsx index f2ebfd987b308..19713b02b6faa 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_full_size.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/components/alert_summary_widget_full_size.tsx @@ -30,6 +30,7 @@ export interface AlertSummaryWidgetFullSizeProps { recoveredAlertCount: number; dateFormat?: string; hideChart?: boolean; + hideStats?: boolean; dependencyProps: DependencyProps; } @@ -40,6 +41,7 @@ export const AlertSummaryWidgetFullSize = ({ dateFormat, recoveredAlertCount, hideChart, + hideStats, dependencyProps: { baseTheme }, }: AlertSummaryWidgetFullSizeProps) => { const chartData = activeAlerts.map((alert) => alert.doc_count); @@ -55,12 +57,14 @@ export const AlertSummaryWidgetFullSize = ({ hasShadow={false} paddingSize="none" > - - - + {!hideStats && ( + + + + )} {!hideChart && (
diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/types.ts b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/types.ts index d8adc429bf5a4..21e663f511b97 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/types.ts +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/alert_summary_widget/types.ts @@ -53,5 +53,6 @@ export interface AlertSummaryWidgetProps { timeRange: AlertSummaryTimeRange; chartProps?: ChartProps; hideChart?: boolean; + hideStats?: boolean; onLoaded?: (alertsCount?: AlertsCount) => void; } diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/event_log/event_log_data_grid.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/event_log/event_log_data_grid.tsx index 08c9a45358f3e..e56ea8c69f339 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/event_log/event_log_data_grid.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/common/components/event_log/event_log_data_grid.tsx @@ -22,8 +22,8 @@ import { EuiDataGridCellPopoverElementProps, useEuiTheme, EuiToolTip, + EuiIconTip, EuiText, - EuiIcon, } from '@elastic/eui'; import { IExecutionLog, @@ -142,14 +142,18 @@ const columnsWithToolTipMap: Record> = { export const ColumnHeaderWithToolTip = ({ id }: { id: string }) => { return ( - - - {columnsWithToolTipMap[id].display} - - - - - + + {columnsWithToolTipMap[id].display} + + + + ); }; diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx index f8ce0153f9681..33d7ec7a11ca2 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list.test.tsx @@ -1382,7 +1382,10 @@ describe('rules_list with show only capability', () => { const rows = await screen.findAllByTestId('rule-row'); expect(rows[0].className).not.toContain('actRulesList__tableRowDisabled'); expect(rows[1].className).toContain('actRulesList__tableRowDisabled'); - fireEvent.mouseOver(await screen.findByText('Info')); + const tooltips = await screen.findAllByText('Info'); + + fireEvent.mouseOver(tooltips[tooltips.length - 1]); + const tooltip = await screen.findByTestId('ruleDisabledByLicenseTooltip'); expect(tooltip).toHaveTextContent('This rule type requires a Platinum license.'); }); diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx index 0652d5416f0a8..075940ff3e141 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_table.tsx @@ -21,7 +21,6 @@ import { EuiTableSortingType, EuiButtonIcon, EuiSelectableOption, - EuiIcon, EuiScreenReaderOnly, EuiCheckbox, RIGHT_ALIGNMENT, @@ -237,7 +236,9 @@ export const RulesListTable = (props: RulesListTableProps) => { const renderPercentileColumnName = useCallback(() => { return ( - { }, } )} - > - - {selectedPercentile}  - - - + size="s" + color="subdued" + type="questionInCircle" + className="eui-alignTop" + /> { { defaultMessage: 'Last run' } ), name: ( - + {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastRunTitle', + { defaultMessage: 'Last run' } )} - > - - {i18n.translate( - 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.lastRunTitle', - { defaultMessage: 'Last run' } +   + - - + size="s" + color="subdued" + type="questionInCircle" + className="eui-alignTop" + /> + ), sortable: true, width: '20%', @@ -469,26 +472,28 @@ export const RulesListTable = (props: RulesListTableProps) => { { defaultMessage: 'Notify' } ), name: ( - + {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.notifyTitle', { - defaultMessage: 'Snooze notifications for a rule.', + defaultMessage: 'Notify', } )} - > - - {i18n.translate( - 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.notifyTitle', +   + - - + size="s" + color="subdued" + type="questionInCircle" + className="eui-alignTop" + /> + ), width: '14%', 'data-test-subj': 'rulesTableCell-rulesListNotify', @@ -581,23 +586,26 @@ export const RulesListTable = (props: RulesListTableProps) => { { defaultMessage: 'Duration' } ), name: ( - + {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.durationTitle', + { defaultMessage: 'Duration' } )} - > - - {i18n.translate( - 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.durationTitle', - { defaultMessage: 'Duration' } +   + - - + size="s" + color="subdued" + type="questionInCircle" + className="eui-alignTop" + /> + ), sortable: true, truncateText: false, @@ -654,23 +662,26 @@ export const RulesListTable = (props: RulesListTableProps) => { { defaultMessage: 'Success ratio' } ), name: ( - + {i18n.translate( + 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.successRatioTitle', + { defaultMessage: 'Success ratio' } )} - > - - {i18n.translate( - 'xpack.triggersActionsUI.sections.rulesList.rulesListTable.columns.successRatioTitle', - { defaultMessage: 'Success ratio' } +   + - - + size="s" + color="subdued" + type="questionInCircle" + className="eui-alignTop" + /> + ), sortable: true, truncateText: false, diff --git a/x-pack/test/api_integration/apis/asset_manager/tests/containers.ts b/x-pack/test/api_integration/apis/asset_manager/tests/containers.ts index d71f7a1c7f951..ea1b7120238b0 100644 --- a/x-pack/test/api_integration/apis/asset_manager/tests/containers.ts +++ b/x-pack/test/api_integration/apis/asset_manager/tests/containers.ts @@ -23,8 +23,8 @@ export default function ({ getService }: FtrProviderContext) { await synthtrace.clean(); }); - it('should return container assets', async () => { - await synthtrace.index(generateContainersData({ from, to, count: 5 })); + it('should return docker container assets', async () => { + await synthtrace.index(generateDockerContainersData({ from, to, count: 5 })); const response = await supertest .get(routePaths.GET_CONTAINERS) @@ -38,8 +38,8 @@ export default function ({ getService }: FtrProviderContext) { expect(response.body.containers.length).to.equal(5); }); - it('should return a specific container asset by EAN', async () => { - await synthtrace.index(generateContainersData({ from, to, count: 5 })); + it('should return a specific docker container asset by EAN', async () => { + await synthtrace.index(generateDockerContainersData({ from, to, count: 5 })); const testEan = 'container:container-id-1'; const response = await supertest @@ -56,8 +56,68 @@ export default function ({ getService }: FtrProviderContext) { expect(response.body.containers[0]['asset.ean']).to.equal(testEan); }); - it('should return a filtered list of container assets by ID wildcard pattern', async () => { - await synthtrace.index(generateContainersData({ from, to, count: 15 })); + it('should return a filtered list of docker container assets by ID wildcard pattern', async () => { + await synthtrace.index(generateDockerContainersData({ from, to, count: 15 })); + const testIdPattern = '*id-1*'; + + const response = await supertest + .get(routePaths.GET_CONTAINERS) + .query({ + from, + to, + stringFilters: JSON.stringify({ id: testIdPattern }), + }) + .expect(200); + + expect(response.body).to.have.property('containers'); + expect(response.body.containers.length).to.equal(6); + + const ids = response.body.containers.map((result: Asset) => result['asset.id']); + + expect(ids).to.eql([ + 'container-id-1', + 'container-id-10', + 'container-id-11', + 'container-id-12', + 'container-id-13', + 'container-id-14', + ]); + }); + + it('should return k8s container assets', async () => { + await synthtrace.index(generateK8sContainersData({ from, to, count: 5 })); + const response = await supertest + .get(routePaths.GET_CONTAINERS) + .query({ + from, + to, + }) + .expect(200); + + expect(response.body).to.have.property('containers'); + expect(response.body.containers.length).to.equal(5); + }); + + it('should return a specific k8s container asset by EAN', async () => { + await synthtrace.index(generateK8sContainersData({ from, to, count: 5 })); + const testEan = 'container:container-id-1'; + + const response = await supertest + .get(routePaths.GET_CONTAINERS) + .query({ + from, + to, + stringFilters: JSON.stringify({ ean: testEan }), + }) + .expect(200); + + expect(response.body).to.have.property('containers'); + expect(response.body.containers.length).to.equal(1); + expect(response.body.containers[0]['asset.ean']).to.equal(testEan); + }); + + it('should return a filtered list of k8s container assets by ID wildcard pattern', async () => { + await synthtrace.index(generateK8sContainersData({ from, to, count: 15 })); const testIdPattern = '*id-1*'; const response = await supertest @@ -86,7 +146,30 @@ export default function ({ getService }: FtrProviderContext) { }); } -function generateContainersData({ +function generateDockerContainersData({ + from, + to, + count = 1, +}: { + from: string; + to: string; + count: number; +}) { + const range = timerange(from, to); + + const containers = Array(count) + .fill(0) + .map((_, idx) => infra.dockerContainer(`container-id-${idx}`)); + + return range + .interval('1m') + .rate(1) + .generator((timestamp) => + containers.map((container) => container.metrics().timestamp(timestamp)) + ); +} + +function generateK8sContainersData({ from, to, count = 1, @@ -100,7 +183,7 @@ function generateContainersData({ const containers = Array(count) .fill(0) .map((_, idx) => - infra.container(`container-id-${idx}`, `container-uid-${idx + 1000}`, `node-name-${idx}`) + infra.k8sContainer(`container-id-${idx}`, `container-uid-${idx + 1000}`, `node-name-${idx}`) ); return range diff --git a/x-pack/test/common/services/index.ts b/x-pack/test/common/services/index.ts index a613fb8899c6c..b5045fd94f8e5 100644 --- a/x-pack/test/common/services/index.ts +++ b/x-pack/test/common/services/index.ts @@ -11,6 +11,7 @@ import { InfraLogViewsServiceProvider } from './infra_log_views'; import { SpacesServiceProvider } from './spaces'; import { BsearchSecureService } from './bsearch_secure'; import { ApmSynthtraceKibanaClientProvider } from './apm_synthtrace_kibana_client'; +import { InfraSynthtraceKibanaClientProvider } from './infra_synthtrace_kibana_client'; export const services = { ...kibanaCommonServices, @@ -19,4 +20,5 @@ export const services = { spaces: SpacesServiceProvider, secureBsearch: BsearchSecureService, apmSynthtraceKibanaClient: ApmSynthtraceKibanaClientProvider, + infraSynthtraceKibanaClient: InfraSynthtraceKibanaClientProvider, }; diff --git a/x-pack/test/common/services/infra_synthtrace_kibana_client.ts b/x-pack/test/common/services/infra_synthtrace_kibana_client.ts new file mode 100644 index 0000000000000..5a8a3c4e06578 --- /dev/null +++ b/x-pack/test/common/services/infra_synthtrace_kibana_client.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import url from 'url'; +import { kbnTestConfig } from '@kbn/test'; +import { InfraSynthtraceKibanaClient, createLogger, LogLevel } from '@kbn/apm-synthtrace'; + +const getKibanaServerUrlWithAuth = () => { + const kibanaServerUrl = url.format(kbnTestConfig.getUrlParts() as url.UrlObject); + const kibanaServerUrlWithAuth = url + .format({ + ...url.parse(kibanaServerUrl), + auth: `elastic:${kbnTestConfig.getUrlParts().password}`, + }) + .slice(0, -1); + return kibanaServerUrlWithAuth; +}; + +export function InfraSynthtraceKibanaClientProvider() { + const kibanaServerUrlWithAuth = getKibanaServerUrlWithAuth(); + const target = kibanaServerUrlWithAuth; + const logger = createLogger(LogLevel.debug); + const username = 'elastic'; + const password = kbnTestConfig.getUrlParts().password || 'changeme'; + const kibanaClient = new InfraSynthtraceKibanaClient({ + target, + logger, + username, + password, + }); + + return kibanaClient; +} diff --git a/x-pack/test/common/utils/synthtrace/infra_es_client.ts b/x-pack/test/common/utils/synthtrace/infra_es_client.ts new file mode 100644 index 0000000000000..7e39942a9a46c --- /dev/null +++ b/x-pack/test/common/utils/synthtrace/infra_es_client.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 { Client } from '@elastic/elasticsearch'; +import { InfraSynthtraceEsClient, createLogger, LogLevel } from '@kbn/apm-synthtrace'; + +export async function getInfraSynthtraceEsClient(client: Client) { + return new InfraSynthtraceEsClient({ + client, + logger: createLogger(LogLevel.info), + refreshAfterIndex: true, + }); +} diff --git a/x-pack/test/functional/apps/infra/constants.ts b/x-pack/test/functional/apps/infra/constants.ts index fcead1cf9dc26..4c1d0d29a6ca4 100644 --- a/x-pack/test/functional/apps/infra/constants.ts +++ b/x-pack/test/functional/apps/infra/constants.ts @@ -51,7 +51,11 @@ export const ML_JOB_IDS = [ export const HOSTS_LINK_LOCAL_STORAGE_KEY = 'inventoryUI:hostsLinkClicked'; export const INVENTORY_PATH = 'metrics/inventory'; -export const NODE_DETAILS_PATH = 'detail/host'; +export const NODE_DETAILS_PATH = 'detail'; export const HOSTS_VIEW_PATH = 'metrics/hosts'; export const DATE_PICKER_FORMAT = 'MMM D, YYYY @ HH:mm:ss.SSS'; + +export const DATE_WITH_DOCKER_DATA_FROM = '2023-03-28T18:20:00.000Z'; +export const DATE_WITH_DOCKER_DATA_TO = '2023-03-28T18:21:00.000Z'; +export const DATE_WITH_DOCKER_DATA = '03/28/2023 6:20:59 PM'; diff --git a/x-pack/test/functional/apps/infra/helpers.ts b/x-pack/test/functional/apps/infra/helpers.ts index 51356acadf146..2ddabf314390f 100644 --- a/x-pack/test/functional/apps/infra/helpers.ts +++ b/x-pack/test/functional/apps/infra/helpers.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { apm, timerange } from '@kbn/apm-synthtrace-client'; +import { apm, timerange, infra } from '@kbn/apm-synthtrace-client'; const SERVICE_PREFIX = 'service'; // generates traces, metrics for services @@ -46,3 +46,26 @@ export function generateAddServicesToExistingHost({ ) ); } + +export function generateDockerContainersData({ + from, + to, + count = 1, +}: { + from: string; + to: string; + count?: number; +}) { + const range = timerange(from, to); + + const containers = Array(count) + .fill(0) + .map((_, idx) => infra.dockerContainer(`container-id-${idx}`)); + + return range + .interval('30s') + .rate(1) + .generator((timestamp) => + containers.flatMap((container) => container.metrics().timestamp(timestamp)) + ); +} diff --git a/x-pack/test/functional/apps/infra/home_page.ts b/x-pack/test/functional/apps/infra/home_page.ts index df22e6ac8ccba..5e0dd1d36d50f 100644 --- a/x-pack/test/functional/apps/infra/home_page.ts +++ b/x-pack/test/functional/apps/infra/home_page.ts @@ -8,17 +8,25 @@ import expect from '@kbn/expect'; import { parse } from 'url'; import { KUBERNETES_TOUR_STORAGE_KEY } from '@kbn/infra-plugin/public/pages/metrics/inventory_view/components/kubernetes_tour'; +import { InfraSynthtraceEsClient } from '@kbn/apm-synthtrace'; import { FtrProviderContext } from '../../ftr_provider_context'; import { DATES, INVENTORY_PATH } from './constants'; +import { generateDockerContainersData } from './helpers'; +import { getInfraSynthtraceEsClient } from '../../../common/utils/synthtrace/infra_es_client'; const DATE_WITH_DATA = DATES.metricsAndLogs.hosts.withData; const DATE_WITHOUT_DATA = DATES.metricsAndLogs.hosts.withoutData; const DATE_WITH_POD_WITH_DATA = DATES.metricsAndLogs.pods.withData; +const DATE_WITH_DOCKER_DATA_FROM = '2023-03-28T18:20:00.000Z'; +const DATE_WITH_DOCKER_DATA_TO = '2023-03-28T18:21:00.000Z'; +const DATE_WITH_DOCKER_DATA = '03/28/2023 6:20:00 PM'; export default ({ getPageObjects, getService }: FtrProviderContext) => { const esArchiver = getService('esArchiver'); const browser = getService('browser'); const retry = getService('retry'); + const esClient = getService('es'); + const infraSynthtraceKibanaClient = getService('infraSynthtraceKibanaClient'); const pageObjects = getPageObjects([ 'common', 'header', @@ -355,7 +363,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await returnTo(INVENTORY_PATH); }); - it('Should redirect to Node Details page', async () => { + it('Should redirect to Pod Details page', async () => { await pageObjects.infraHome.goToPods(); await pageObjects.infraHome.goToTime(DATE_WITH_POD_WITH_DATA); await pageObjects.infraHome.clickOnFirstNode(); @@ -370,6 +378,41 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await returnTo(INVENTORY_PATH); }); + + describe('Redirect to Container Details page', () => { + let synthEsClient: InfraSynthtraceEsClient; + before(async () => { + const version = await infraSynthtraceKibanaClient.fetchLatestSystemPackageVersion(); + await infraSynthtraceKibanaClient.installSystemPackage(version); + synthEsClient = await getInfraSynthtraceEsClient(esClient); + await synthEsClient.index( + generateDockerContainersData({ + from: DATE_WITH_DOCKER_DATA_FROM, + to: DATE_WITH_DOCKER_DATA_TO, + count: 5, + }) + ); + }); + + after(async () => { + return await synthEsClient.clean(); + }); + it('Should redirect to Container Details page', async () => { + await pageObjects.infraHome.goToContainer(); + await pageObjects.infraHome.goToTime(DATE_WITH_DOCKER_DATA); + await pageObjects.infraHome.clickOnFirstNode(); + await pageObjects.infraHome.clickOnGoToNodeDetails(); + + await retry.try(async () => { + const documentTitle = await browser.getTitle(); + expect(documentTitle).to.contain( + 'container-id-4 - Inventory - Infrastructure - Observability - Elastic' + ); + }); + + await returnTo(INVENTORY_PATH); + }); + }); }); }); diff --git a/x-pack/test/functional/apps/infra/node_details.ts b/x-pack/test/functional/apps/infra/node_details.ts index 88a8dfe9b2aa2..47792ec4bb2ba 100644 --- a/x-pack/test/functional/apps/infra/node_details.ts +++ b/x-pack/test/functional/apps/infra/node_details.ts @@ -7,14 +7,26 @@ import moment from 'moment'; import expect from '@kbn/expect'; -import { enableInfrastructureProfilingIntegration } from '@kbn/observability-plugin/common'; +import { InfraSynthtraceEsClient } from '@kbn/apm-synthtrace'; +import { + enableInfrastructureContainerAssetView, + enableInfrastructureProfilingIntegration, +} from '@kbn/observability-plugin/common'; import { ALERT_STATUS_ACTIVE, ALERT_STATUS_RECOVERED, ALERT_STATUS_UNTRACKED, } from '@kbn/rule-data-utils'; import { FtrProviderContext } from '../../ftr_provider_context'; -import { DATES, NODE_DETAILS_PATH, DATE_PICKER_FORMAT } from './constants'; +import { + DATES, + NODE_DETAILS_PATH, + DATE_PICKER_FORMAT, + DATE_WITH_DOCKER_DATA_FROM, + DATE_WITH_DOCKER_DATA_TO, +} from './constants'; +import { getInfraSynthtraceEsClient } from '../../../common/utils/synthtrace/infra_es_client'; +import { generateDockerContainersData } from './helpers'; const START_HOST_ALERTS_DATE = moment.utc(DATES.metricsAndLogs.hosts.min); const END_HOST_ALERTS_DATE = moment.utc(DATES.metricsAndLogs.hosts.max); @@ -32,6 +44,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const browser = getService('browser'); const kibanaServer = getService('kibanaServer'); const esArchiver = getService('esArchiver'); + const infraSynthtraceKibanaClient = getService('infraSynthtraceKibanaClient'); + const esClient = getService('es'); const retry = getService('retry'); const testSubjects = getService('testSubjects'); const pageObjects = getPageObjects([ @@ -50,10 +64,10 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { return queryParams.toString(); }; - const navigateToNodeDetails = async (assetId: string, assetName: string) => { + const navigateToNodeDetails = async (assetId: string, assetName: string, assetType: string) => { await pageObjects.common.navigateToUrlWithBrowserHistory( 'infraOps', - `/${NODE_DETAILS_PATH}/${assetId}`, + `/${NODE_DETAILS_PATH}/${assetType}/${assetId}`, getNodeDetailsUrl(assetName), { insertTimestamp: false, @@ -79,6 +93,12 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await pageObjects.header.waitUntilLoadingHasFinished(); }; + const setInfrastructureContainerAssetViewUiSetting = async (value: boolean = true) => { + await kibanaServer.uiSettings.update({ [enableInfrastructureContainerAssetView]: value }); + await browser.refresh(); + await pageObjects.header.waitUntilLoadingHasFinished(); + }; + describe('Node Details', () => { describe('#With Asset Details', () => { before(async () => { @@ -90,7 +110,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { ]); await browser.setWindowSize(1600, 1200); - await navigateToNodeDetails('Jennys-MBP.fritz.box', 'Jennys-MBP.fritz.box'); + await navigateToNodeDetails('Jennys-MBP.fritz.box', 'Jennys-MBP.fritz.box', 'host'); await pageObjects.header.waitUntilLoadingHasFinished(); }); @@ -102,7 +122,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { ]); }); - describe('#Date picker', () => { + describe('#Date picker: host', () => { before(async () => { await pageObjects.assetDetails.clickOverviewTab(); @@ -247,7 +267,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const ALL_ALERTS = ACTIVE_ALERTS + RECOVERED_ALERTS; const COLUMNS = 11; before(async () => { - await navigateToNodeDetails('demo-stack-apache-01', 'demo-stack-apache-01'); + await navigateToNodeDetails('demo-stack-apache-01', 'demo-stack-apache-01', 'host'); await pageObjects.header.waitUntilLoadingHasFinished(); await pageObjects.timePicker.setAbsoluteRange( @@ -259,7 +279,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); after(async () => { - await navigateToNodeDetails('Jennys-MBP.fritz.box', 'Jennys-MBP.fritz.box'); + await navigateToNodeDetails('Jennys-MBP.fritz.box', 'Jennys-MBP.fritz.box', 'host'); await pageObjects.header.waitUntilLoadingHasFinished(); await pageObjects.timePicker.setAbsoluteRange( @@ -482,7 +502,7 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('Host with alerts and no processes', () => { before(async () => { - await navigateToNodeDetails('demo-stack-mysql-01', 'demo-stack-mysql-01'); + await navigateToNodeDetails('demo-stack-mysql-01', 'demo-stack-mysql-01', 'host'); await pageObjects.timePicker.setAbsoluteRange( START_HOST_ALERTS_DATE.format(DATE_PICKER_FORMAT), END_HOST_ALERTS_DATE.format(DATE_PICKER_FORMAT) @@ -516,7 +536,11 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { describe('#With Kubernetes section', () => { before(async () => { - await navigateToNodeDetails('demo-stack-kubernetes-01', 'demo-stack-kubernetes-01'); + await navigateToNodeDetails( + 'demo-stack-kubernetes-01', + 'demo-stack-kubernetes-01', + 'host' + ); await pageObjects.header.waitUntilLoadingHasFinished(); }); @@ -597,6 +621,57 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { }); }); }); + + describe('#Asset Type: container', () => { + let synthEsClient: InfraSynthtraceEsClient; + before(async () => { + const version = await infraSynthtraceKibanaClient.fetchLatestSystemPackageVersion(); + await infraSynthtraceKibanaClient.installSystemPackage(version); + synthEsClient = await getInfraSynthtraceEsClient(esClient); + await synthEsClient.index( + generateDockerContainersData({ + from: DATE_WITH_DOCKER_DATA_FROM, + to: DATE_WITH_DOCKER_DATA_TO, + count: 1, + }) + ); + }); + + after(async () => { + await synthEsClient.clean(); + }); + + describe('when container asset view is disabled', () => { + it('should show old view of container details', async () => { + await setInfrastructureContainerAssetViewUiSetting(false); + await navigateToNodeDetails('container-id-0', 'container-id-0', 'container'); + await pageObjects.header.waitUntilLoadingHasFinished(); + await testSubjects.find('metricsEmptyViewState'); + }); + }); + + describe('when container asset view is enabled', () => { + it('should show asset container details page', async () => { + await setInfrastructureContainerAssetViewUiSetting(true); + await navigateToNodeDetails('container-id-0', 'container-id-0', 'container'); + await pageObjects.header.waitUntilLoadingHasFinished(); + + await pageObjects.assetDetails.getOverviewTab(); + }); + + [ + { metric: 'cpu', chartsCount: 1 }, + { metric: 'memory', chartsCount: 1 }, + ].forEach(({ metric, chartsCount }) => { + it(`should render ${chartsCount} ${metric} chart(s) in the Metrics section`, async () => { + const charts = await pageObjects.assetDetails.getOverviewTabDockerMetricCharts( + metric + ); + expect(charts.length).to.equal(chartsCount); + }); + }); + }); + }); }); }); }; diff --git a/x-pack/test/functional/apps/ingest_pipelines/ingest_pipelines.ts b/x-pack/test/functional/apps/ingest_pipelines/ingest_pipelines.ts index 3fae7aa9ecc87..c6f1eb4d189a0 100644 --- a/x-pack/test/functional/apps/ingest_pipelines/ingest_pipelines.ts +++ b/x-pack/test/functional/apps/ingest_pipelines/ingest_pipelines.ts @@ -26,6 +26,8 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { const log = getService('log'); const es = getService('es'); const security = getService('security'); + const browser = getService('browser'); + const testSubjects = getService('testSubjects'); describe('Ingest Pipelines', function () { this.tags('smoke'); @@ -60,6 +62,61 @@ export default ({ getPageObjects, getService }: FtrProviderContext) => { await es.ingest.deletePipeline({ id: TEST_PIPELINE_NAME }); }); + it('adds pipeline query param when flyout is opened, and removes it when closed', async () => { + // Open the flyout for the first pipeline + await pageObjects.ingestPipelines.clickPipelineLink(0); + + let url = await browser.getCurrentUrl(); + const pipelinesList = await pageObjects.ingestPipelines.getPipelinesList(); + + expect(url).to.contain(`pipeline=${pipelinesList[0]}`); + + await testSubjects.click('closeDetailsFlyout'); + + url = await browser.getCurrentUrl(); + expect(url).not.to.contain(`pipeline=${pipelinesList[0]}`); + }); + + it('sets query params for search and filters when changed', async () => { + // Set the search input with a test search + await testSubjects.setValue('pipelineTableSearch', 'test'); + + // The url should now contain the queryText from the search input + let url = await browser.getCurrentUrl(); + expect(url).to.contain('queryText=test'); + + // Select a filter + await testSubjects.click('filtersDropdown'); + await testSubjects.click('managedFilter'); + + // Read the url again + url = await browser.getCurrentUrl(); + + // The managed filter should be in the url + expect(url).to.contain('managed=on'); + }); + + it('removes only pipeline query param and leaves other query params if any', async () => { + // Set the search input with a test search + await testSubjects.setValue('pipelineTableSearch', 'test'); + // Open the flyout for the first pipeline + await pageObjects.ingestPipelines.clickPipelineLink(0); + + let url = await browser.getCurrentUrl(); + const pipelinesList = await pageObjects.ingestPipelines.getPipelinesList(); + + // Url should contain both query params + expect(url).to.contain(`pipeline=${pipelinesList[0]}`); + expect(url).to.contain('queryText=test'); + + // Close the flyout + await testSubjects.click('closeDetailsFlyout'); + + // Url should now only have the query param for the search input + url = await browser.getCurrentUrl(); + expect(url).to.contain('queryText=test'); + }); + it('Displays the test pipeline in the list of pipelines', async () => { log.debug('Checking that the test pipeline is in the pipelines list.'); await pageObjects.ingestPipelines.increasePipelineListPageSize(); diff --git a/x-pack/test/functional/apps/lens/group6/lens_reporting.ts b/x-pack/test/functional/apps/lens/group6/lens_reporting.ts index 44a40574bd66f..9d029c6aa9bf0 100644 --- a/x-pack/test/functional/apps/lens/group6/lens_reporting.ts +++ b/x-pack/test/functional/apps/lens/group6/lens_reporting.ts @@ -73,7 +73,8 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); for (const type of ['PNG', 'PDF'] as const) { - describe(`${type} report`, () => { + // FLAKY: https://github.com/elastic/kibana/issues/183567 + describe.skip(`${type} report`, () => { afterEach(async () => { await PageObjects.lens.closeShareModal(); }); diff --git a/x-pack/test/functional/apps/observability_logs_explorer/columns_selection.ts b/x-pack/test/functional/apps/observability_logs_explorer/columns_selection.ts index d61ce9e734eba..1c64c85534d66 100644 --- a/x-pack/test/functional/apps/observability_logs_explorer/columns_selection.ts +++ b/x-pack/test/functional/apps/observability_logs_explorer/columns_selection.ts @@ -130,9 +130,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(cellValue.includes('error.message')).to.be(false); expect(cellValue.includes('event.original')).to.be(false); - const cellAttribute = await cellElement.findByTestSubject( - 'logsExplorerCellDescriptionList' - ); + const cellAttribute = await cellElement.findByTestSubject('discoverCellDescriptionList'); expect(cellAttribute).not.to.be.empty(); }); }); diff --git a/x-pack/test/functional/apps/security/index.ts b/x-pack/test/functional/apps/security/index.ts index 009c270d3c2a3..a65db6d3d3cf8 100644 --- a/x-pack/test/functional/apps/security/index.ts +++ b/x-pack/test/functional/apps/security/index.ts @@ -18,5 +18,6 @@ export default function ({ loadTestFile }: FtrProviderContext) { loadTestFile(require.resolve('./user_email')); loadTestFile(require.resolve('./role_mappings')); loadTestFile(require.resolve('./remote_cluster_security_roles')); + loadTestFile(require.resolve('./role_description')); }); } diff --git a/x-pack/test/functional/apps/security/role_description.ts b/x-pack/test/functional/apps/security/role_description.ts new file mode 100644 index 0000000000000..eb272dec3d0a5 --- /dev/null +++ b/x-pack/test/functional/apps/security/role_description.ts @@ -0,0 +1,68 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import expect from '@kbn/expect'; +import { FtrProviderContext } from '../../ftr_provider_context'; + +export default function ({ getService, getPageObjects }: FtrProviderContext) { + const testSubjects = getService('testSubjects'); + const security = getService('security'); + const PageObjects = getPageObjects(['security', 'settings', 'common', 'header']); + + describe('Role Description', function () { + before(async () => { + await security.testUser.setRoles(['cluster_security_manager']); + await PageObjects.security.initTests(); + await PageObjects.settings.navigateTo(); + await PageObjects.security.clickElasticsearchRoles(); + }); + + after(async () => { + // NOTE: Logout needs to happen before anything else to avoid flaky behavior + await PageObjects.security.forceLogout(); + await security.role.delete('a-role-with-description'); + await security.role.delete('a-role-without-description'); + await security.testUser.restoreDefaults(); + }); + + it('Can create role with description', async () => { + await PageObjects.security.clickCreateNewRole(); + await testSubjects.setValue('roleFormNameInput', 'a-role-with-description'); + await testSubjects.setValue('roleFormDescriptionInput', 'role description'); + await PageObjects.security.clickSaveEditRole(); + + const columnDescription = await testSubjects.getVisibleText( + 'roleRowDescription-a-role-with-description' + ); + expect(columnDescription).to.equal('role description'); + + await PageObjects.settings.clickLinkText('a-role-with-description'); + const name = await testSubjects.getAttribute('roleFormNameInput', 'value'); + const description = await testSubjects.getAttribute('roleFormDescriptionInput', 'value'); + + expect(name).to.equal('a-role-with-description'); + expect(description).to.equal('role description'); + + await PageObjects.security.clickCancelEditRole(); + }); + + it('Can create role without description', async () => { + await PageObjects.security.clickCreateNewRole(); + await testSubjects.setValue('roleFormNameInput', 'a-role-without-description'); + await PageObjects.security.clickSaveEditRole(); + + await PageObjects.settings.clickLinkText('a-role-without-description'); + const name = await testSubjects.getAttribute('roleFormNameInput', 'value'); + const description = await testSubjects.getAttribute('roleFormDescriptionInput', 'value'); + + expect(name).to.equal('a-role-without-description'); + expect(description).to.equal(''); + + await PageObjects.security.clickCancelEditRole(); + }); + }); +} diff --git a/x-pack/test/functional/apps/transform/creation/runtime_mappings_saved_search/creation_runtime_mappings.ts b/x-pack/test/functional/apps/transform/creation/runtime_mappings_saved_search/creation_runtime_mappings.ts index bbdf53b3eda5c..bf763457a5490 100644 --- a/x-pack/test/functional/apps/transform/creation/runtime_mappings_saved_search/creation_runtime_mappings.ts +++ b/x-pack/test/functional/apps/transform/creation/runtime_mappings_saved_search/creation_runtime_mappings.ts @@ -251,7 +251,8 @@ export default function ({ getService }: FtrProviderContext) { ]; for (const testData of testDataList) { - describe(`${testData.suiteTitle}`, function () { + // FLAKY: https://github.com/elastic/kibana/issues/183339 + describe.skip(`${testData.suiteTitle}`, function () { after(async () => { await transform.api.deleteIndices(testData.destinationIndex); await transform.testResources.deleteDataViewByTitle(testData.destinationIndex); diff --git a/x-pack/test/functional/page_objects/asset_details.ts b/x-pack/test/functional/page_objects/asset_details.ts index bbb5ebead305b..32efd9f315ad2 100644 --- a/x-pack/test/functional/page_objects/asset_details.ts +++ b/x-pack/test/functional/page_objects/asset_details.ts @@ -30,6 +30,10 @@ export function AssetDetailsProvider({ getService }: FtrProviderContext) { return testSubjects.click('infraAssetDetailsOverviewTab'); }, + async getOverviewTab() { + return testSubjects.find('infraAssetDetailsOverviewTab'); + }, + async getAssetDetailsKPITileValue(type: string) { const element = await testSubjects.find(`infraAssetDetailsKPI${type}`); const div = await element.findByClassName('echMetricText__value'); @@ -103,6 +107,15 @@ export function AssetDetailsProvider({ getService }: FtrProviderContext) { return section.findAllByCssSelector('[data-test-subj*="infraAssetDetailsMetricChart"]'); }, + async getOverviewTabDockerMetricCharts(metric: string) { + const container = await testSubjects.find('infraAssetDetailsOverviewTabContent'); + const section = await container.findByTestSubject( + `infraAssetDetailsDockerChartsSection${metric}` + ); + + return section.findAllByCssSelector('[data-test-subj*="infraAssetDetailsMetricChart"]'); + }, + async getOverviewTabKubernetesMetricCharts() { const container = await testSubjects.find('infraAssetDetailsOverviewTabContent'); const section = await container.findByTestSubject(`infraAssetDetailsKubernetesChartsSection`); diff --git a/x-pack/test/functional/page_objects/infra_home_page.ts b/x-pack/test/functional/page_objects/infra_home_page.ts index 68df8c69784a9..f112e76ee809a 100644 --- a/x-pack/test/functional/page_objects/infra_home_page.ts +++ b/x-pack/test/functional/page_objects/infra_home_page.ts @@ -212,10 +212,10 @@ export function InfraHomePageProvider({ getService, getPageObjects }: FtrProvide return testSubjects.click('goToPods'); }, - async goToDocker() { + async goToContainer() { await testSubjects.click('openInventorySwitcher'); await testSubjects.find('goToHost'); - return testSubjects.click('goToDocker'); + return testSubjects.click('goToContainer'); }, async goToSettings() { diff --git a/x-pack/test/functional_cors/plugins/kibana_cors_test/server/plugin.ts b/x-pack/test/functional_cors/plugins/kibana_cors_test/server/plugin.ts index b13505a081ae9..869c4b6f9090c 100644 --- a/x-pack/test/functional_cors/plugins/kibana_cors_test/server/plugin.ts +++ b/x-pack/test/functional_cors/plugins/kibana_cors_test/server/plugin.ts @@ -8,12 +8,11 @@ import Hapi from '@hapi/hapi'; import { kbnTestConfig } from '@kbn/test/kbn_test_config'; import Url from 'url'; -import abab from 'abab'; import type { Plugin, CoreSetup, CoreStart, PluginInitializerContext } from '@kbn/core/server'; import type { ConfigSchema } from './config'; -const apiToken = abab.btoa(kbnTestConfig.getUrlParts().auth!); +const apiToken = Buffer.from(kbnTestConfig.getUrlParts().auth!).toString('base64'); function renderBody(kibanaUrl: string) { const url = Url.resolve(kibanaUrl, '/cors-test'); diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_calculation.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_calculation.ts index 653c0d4483823..1dd6b0f9e5766 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_calculation.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_calculation.ts @@ -9,8 +9,8 @@ import expect from '@kbn/expect'; import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { RISK_SCORE_CALCULATION_URL } from '@kbn/security-solution-plugin/common/constants'; -import type { RiskScore } from '@kbn/security-solution-plugin/common/entity_analytics/risk_engine'; import { v4 as uuidv4 } from 'uuid'; +import { EntityRiskScoreRecord } from '@kbn/security-solution-plugin/common/api/entity_analytics/common'; import { dataGeneratorFactory } from '../../../detections_response/utils'; import { deleteAllAlerts, deleteAllRules } from '../../../../../common/utils/security_solution'; import { @@ -46,7 +46,7 @@ export default ({ getService }: FtrProviderContext): void => { body, }: { body: object; - }): Promise<{ scores: RiskScore[] }> => { + }): Promise<{ scores: EntityRiskScoreRecord[] }> => { const { body: result } = await supertest .post(RISK_SCORE_CALCULATION_URL) .set('kbn-xsrf', 'true') diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_entity_calculation.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_entity_calculation.ts index 2e1b3a4406571..e3ddfbbda4ef2 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_entity_calculation.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_entity_calculation.ts @@ -9,8 +9,8 @@ import expect from '@kbn/expect'; import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; import { RISK_SCORE_ENTITY_CALCULATION_URL } from '@kbn/security-solution-plugin/common/constants'; -import type { RiskScore } from '@kbn/security-solution-plugin/common/entity_analytics/risk_engine'; import { v4 as uuidv4 } from 'uuid'; +import { EntityRiskScoreRecord } from '@kbn/security-solution-plugin/common/api/entity_analytics/common'; import { dataGeneratorFactory } from '../../../detections_response/utils'; import { deleteAllAlerts, deleteAllRules } from '../../../../../common/utils/security_solution'; import { @@ -46,7 +46,7 @@ export default ({ getService }: FtrProviderContext): void => { body, }: { body: object; - }): Promise<{ score: RiskScore; success: boolean }> => { + }): Promise<{ score: EntityRiskScoreRecord; success: boolean }> => { const { body: result } = await supertest .post(RISK_SCORE_ENTITY_CALCULATION_URL) .set('kbn-xsrf', 'true') diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_preview.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_preview.ts index a9c2c9eb37b1e..98ea7b172583c 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_preview.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/risk_engine/trial_license_complete_tier/risk_score_preview.ts @@ -8,9 +8,9 @@ import expect from '@kbn/expect'; import { ALERT_RISK_SCORE } from '@kbn/rule-data-utils'; import { RISK_SCORE_PREVIEW_URL } from '@kbn/security-solution-plugin/common/constants'; -import type { RiskScore } from '@kbn/security-solution-plugin/common/entity_analytics/risk_engine'; import { v4 as uuidv4 } from 'uuid'; import { X_ELASTIC_INTERNAL_ORIGIN_REQUEST } from '@kbn/core-http-common'; +import { EntityRiskScoreRecord } from '@kbn/security-solution-plugin/common/api/entity_analytics/common'; import { dataGeneratorFactory } from '../../../detections_response/utils'; import { createAlertsIndex, @@ -42,7 +42,9 @@ export default ({ getService }: FtrProviderContext): void => { body, }: { body: object; - }): Promise<{ scores: { host?: RiskScore[]; user?: RiskScore[] } }> => { + }): Promise<{ + scores: { host?: EntityRiskScoreRecord[]; user?: EntityRiskScoreRecord[] }; + }> => { const defaultBody = { data_view_id: '.alerts-security.alerts-default' }; const { body: result } = await supertest .post(RISK_SCORE_PREVIEW_URL) diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/risk_engine.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/risk_engine.ts index 82f33d6637d6e..be7010ab1fc7b 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/risk_engine.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/risk_engine.ts @@ -13,10 +13,7 @@ import { v4 as uuidv4 } from 'uuid'; import SuperTest from 'supertest'; import type { Client } from '@elastic/elasticsearch'; import type { ToolingLog } from '@kbn/tooling-log'; -import type { - EcsRiskScore, - RiskScore, -} from '@kbn/security-solution-plugin/common/entity_analytics/risk_engine'; +import type { EcsRiskScore } from '@kbn/security-solution-plugin/common/entity_analytics/risk_engine'; import { riskEngineConfigurationTypeName } from '@kbn/security-solution-plugin/server/lib/entity_analytics/risk_engine/saved_object'; import type { KbnClient } from '@kbn/test'; import { @@ -27,6 +24,8 @@ import { RISK_ENGINE_PRIVILEGES_URL, } from '@kbn/security-solution-plugin/common/constants'; import { MappingTypeMapping } from '@elastic/elasticsearch/lib/api/types'; +import { removeLegacyTransforms } from '@kbn/security-solution-plugin/server/lib/entity_analytics/utils/transforms'; +import { EntityRiskScoreRecord } from '@kbn/security-solution-plugin/common/api/entity_analytics/common'; import { createRule, waitForAlertsToBePresent, @@ -37,7 +36,7 @@ import { routeWithNamespace, } from '../../../../common/utils/security_solution'; -const sanitizeScore = (score: Partial): Partial => { +const sanitizeScore = (score: Partial): Partial => { const { '@timestamp': timestamp, inputs, @@ -49,10 +48,13 @@ const sanitizeScore = (score: Partial): Partial => { return rest; }; -export const sanitizeScores = (scores: Array>): Array> => - scores.map(sanitizeScore); +export const sanitizeScores = ( + scores: Array> +): Array> => scores.map(sanitizeScore); -export const normalizeScores = (scores: Array>): Array> => +export const normalizeScores = ( + scores: Array> +): Array> => scores.map((score) => sanitizeScore(score.host?.risk ?? score.user?.risk ?? {})); export const buildDocument = (body: object, id?: string) => { @@ -396,14 +398,11 @@ export const clearLegacyTransforms = async ({ es: Client; log: ToolingLog; }): Promise => { - const transforms = legacyTransformIds.map((transform) => - es.transform.deleteTransform({ - transform_id: transform, - force: true, - }) - ); try { - await Promise.all(transforms); + await removeLegacyTransforms({ + namespace: 'default', + esClient: es, + }); } catch (e) { log.warning(`Error deleting legacy transforms: ${e.message}`); } @@ -423,8 +422,7 @@ export const clearLegacyDashboards = async ({ ) .set('kbn-xsrf', 'true') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send() - .expect(200); + .send(); await supertest .post( @@ -432,8 +430,7 @@ export const clearLegacyDashboards = async ({ ) .set('kbn-xsrf', 'true') .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send() - .expect(200); + .send(); } catch (e) { log.warning(`Error deleting legacy dashboards: ${e.message}`); } diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts index 00a542881a5d0..2b28c6d0c8885 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/detection_alerts/assignments/assignments.cy.ts @@ -17,7 +17,8 @@ import { } from '../../../../../tasks/alerts'; import { createRule } from '../../../../../tasks/api_calls/rules'; import { deleteAlertsAndRules } from '../../../../../tasks/api_calls/common'; -import { getDefaultUserName, login } from '../../../../../tasks/login'; +import { login } from '../../../../../tasks/login'; +import { getDefaultUsername } from '../../../../../tasks/common/users'; import { ALERTS_URL } from '../../../../../urls/navigation'; import { waitForAlertsToPopulate } from '../../../../../tasks/create_new_rule'; import { @@ -39,197 +40,192 @@ import { } from '../../../../../tasks/alert_assignments'; import { ALERTS_COUNT } from '../../../../../screens/alerts'; -// FLAKEY - https://github.com/elastic/kibana/issues/182892 -describe( - 'Alert user assignment - ESS & Serverless', - { tags: ['@ess', '@serverless', '@skipInServerless'] }, - () => { - before(() => { - cy.task('esArchiverLoad', { archiveName: 'auditbeat_multiple' }); +describe('Alert user assignment - ESS & Serverless', { tags: ['@ess', '@serverless'] }, () => { + before(() => { + cy.task('esArchiverLoad', { archiveName: 'auditbeat_multiple' }); + }); + + after(() => { + cy.task('esArchiverUnload', { archiveName: 'auditbeat_multiple' }); + }); + + beforeEach(() => { + login(); + deleteAlertsAndRules(); + createRule(getNewRule({ rule_id: 'new custom rule' })); + visitWithTimeRange(ALERTS_URL); + waitForAlertsToPopulate(); + }); + + context('Basic rendering', () => { + it('alert with no assignees in alerts table & details flyout', () => { + checkEmptyAssigneesStateInAlertsTable(); + + expandFirstAlert(); + checkEmptyAssigneesStateInAlertDetailsFlyout(); }); - after(() => { - cy.task('esArchiverUnload', { archiveName: 'auditbeat_multiple' }); - }); - - beforeEach(() => { - login(); - deleteAlertsAndRules(); - createRule(getNewRule({ rule_id: 'new custom rule' })); - visitWithTimeRange(ALERTS_URL); - waitForAlertsToPopulate(); - }); - - context('Basic rendering', () => { - it('alert with no assignees in alerts table & details flyout', () => { - checkEmptyAssigneesStateInAlertsTable(); + it('alert with some assignees in alerts table & details flyout', () => { + const users = [getDefaultUsername()]; + updateAssigneesForFirstAlert(users); - expandFirstAlert(); - checkEmptyAssigneesStateInAlertDetailsFlyout(); - }); + alertsTableShowsAssigneesForAlert(users); - it('alert with some assignees in alerts table & details flyout', () => { - const users = [getDefaultUserName()]; - updateAssigneesForFirstAlert(users); - - alertsTableShowsAssigneesForAlert(users); - - expandFirstAlert(); - alertDetailsFlyoutShowsAssignees(users); - }); + expandFirstAlert(); + alertDetailsFlyoutShowsAssignees(users); }); + }); - context('Updating assignees (single alert)', () => { - it('adding new assignees via `More actions` in alerts table', () => { - // Assign users - const users = [getDefaultUserName()]; - updateAssigneesForFirstAlert(users); + context('Updating assignees (single alert)', () => { + it('adding new assignees via `More actions` in alerts table', () => { + // Assign users + const users = [getDefaultUsername()]; + updateAssigneesForFirstAlert(users); - // Assignees should appear in the alerts table - alertsTableShowsAssigneesForAlert(users); + // Assignees should appear in the alerts table + alertsTableShowsAssigneesForAlert(users); - // Assignees should appear in the alert's details flyout - expandFirstAlert(); - alertDetailsFlyoutShowsAssignees(users); - }); + // Assignees should appear in the alert's details flyout + expandFirstAlert(); + alertDetailsFlyoutShowsAssignees(users); + }); - it('adding new assignees via add button in flyout', () => { - expandFirstAlert(); + it('adding new assignees via add button in flyout', () => { + expandFirstAlert(); - // Assign users - const users = [getDefaultUserName()]; - updateAssigneesViaAddButtonInFlyout(users); + // Assign users + const users = [getDefaultUsername()]; + updateAssigneesViaAddButtonInFlyout(users); - // Assignees should appear in the alert's details flyout - alertDetailsFlyoutShowsAssignees(users); + // Assignees should appear in the alert's details flyout + alertDetailsFlyoutShowsAssignees(users); - // Assignees should appear in the alerts table - closeAlertFlyout(); - alertsTableShowsAssigneesForAlert(users); - }); + // Assignees should appear in the alerts table + closeAlertFlyout(); + alertsTableShowsAssigneesForAlert(users); + }); - it('adding new assignees via `Take action` button in flyout', () => { - expandFirstAlert(); + it('adding new assignees via `Take action` button in flyout', () => { + expandFirstAlert(); - // Assign users - const users = [getDefaultUserName()]; - updateAssigneesViaTakeActionButtonInFlyout(users); + // Assign users + const users = [getDefaultUsername()]; + updateAssigneesViaTakeActionButtonInFlyout(users); - // Assignees should appear in the alert's details flyout - alertDetailsFlyoutShowsAssignees(users); + // Assignees should appear in the alert's details flyout + alertDetailsFlyoutShowsAssignees(users); - // Assignees should appear in the alerts table - closeAlertFlyout(); - alertsTableShowsAssigneesForAlert(users); - }); + // Assignees should appear in the alerts table + closeAlertFlyout(); + alertsTableShowsAssigneesForAlert(users); + }); - it('removing all assignees via `More actions` in alerts table', () => { - // Initially assigned users - const initialAssignees = [getDefaultUserName()]; - updateAssigneesForFirstAlert(initialAssignees); - alertsTableShowsAssigneesForAlert(initialAssignees); + it('removing all assignees via `More actions` in alerts table', () => { + // Initially assigned users + const initialAssignees = [getDefaultUsername()]; + updateAssigneesForFirstAlert(initialAssignees); + alertsTableShowsAssigneesForAlert(initialAssignees); - removeAllAssigneesForFirstAlert(); + removeAllAssigneesForFirstAlert(); - // Alert should not show any assignee in alerts table or in details flyout - checkEmptyAssigneesStateInAlertsTable(); - expandFirstAlert(); - checkEmptyAssigneesStateInAlertDetailsFlyout(); - }); + // Alert should not show any assignee in alerts table or in details flyout + checkEmptyAssigneesStateInAlertsTable(); + expandFirstAlert(); + checkEmptyAssigneesStateInAlertDetailsFlyout(); + }); - it('removing all assignees via `Take action` button in flyout', () => { - expandFirstAlert(); + it('removing all assignees via `Take action` button in flyout', () => { + expandFirstAlert(); - // Initially assigned users - const initialAssignees = [getDefaultUserName()]; - updateAssigneesViaTakeActionButtonInFlyout(initialAssignees); - alertDetailsFlyoutShowsAssignees(initialAssignees); + // Initially assigned users + const initialAssignees = [getDefaultUsername()]; + updateAssigneesViaTakeActionButtonInFlyout(initialAssignees); + alertDetailsFlyoutShowsAssignees(initialAssignees); - removeAllAssigneesViaTakeActionButtonInFlyout(); + removeAllAssigneesViaTakeActionButtonInFlyout(); - // Alert should not show any assignee in alerts table or in details flyout - checkEmptyAssigneesStateInAlertDetailsFlyout(); - closeAlertFlyout(); - checkEmptyAssigneesStateInAlertsTable(); - }); + // Alert should not show any assignee in alerts table or in details flyout + checkEmptyAssigneesStateInAlertDetailsFlyout(); + closeAlertFlyout(); + checkEmptyAssigneesStateInAlertsTable(); }); + }); - context('Updating assignees (bulk actions)', () => { - it('adding new assignees should be reflected in UI (alerts table)', () => { - selectFirstPageAlerts(); + context('Updating assignees (bulk actions)', () => { + it('adding new assignees should be reflected in UI (alerts table)', () => { + selectFirstPageAlerts(); - // Assign users - const users = [getDefaultUserName()]; - bulkUpdateAssignees(users); + // Assign users + const users = [getDefaultUsername()]; + bulkUpdateAssignees(users); - // Assignees should appear in the alerts table - alertsTableShowsAssigneesForAllAlerts(users); - }); + // Assignees should appear in the alerts table + alertsTableShowsAssigneesForAllAlerts(users); + }); - it('removing all assignees should be reflected in UI (alerts table)', () => { - selectFirstPageAlerts(); + it('removing all assignees should be reflected in UI (alerts table)', () => { + selectFirstPageAlerts(); - // Initially assigned users - const initialAssignees = [getDefaultUserName()]; - bulkUpdateAssignees(initialAssignees); - alertsTableShowsAssigneesForAllAlerts(initialAssignees); + // Initially assigned users + const initialAssignees = [getDefaultUsername()]; + bulkUpdateAssignees(initialAssignees); + alertsTableShowsAssigneesForAllAlerts(initialAssignees); - // Unassign alert - selectFirstPageAlerts(); - bulkRemoveAllAssignees(); + // Unassign alert + selectFirstPageAlerts(); + bulkRemoveAllAssignees(); - // Alerts should not have assignees - checkEmptyAssigneesStateInAlertsTable(); - }); + // Alerts should not have assignees + checkEmptyAssigneesStateInAlertsTable(); }); + }); - context('Alerts filtering', () => { - it('by `No assignees` option', () => { - const totalNumberOfAlerts = 5; - const numberOfSelectedAlerts = 2; - selectNumberOfAlerts(numberOfSelectedAlerts); - bulkUpdateAssignees([getDefaultUserName()]); + context('Alerts filtering', () => { + it('by `No assignees` option', () => { + const totalNumberOfAlerts = 5; + const numberOfSelectedAlerts = 2; + selectNumberOfAlerts(numberOfSelectedAlerts); + bulkUpdateAssignees([getDefaultUsername()]); - filterByAssignees([NO_ASSIGNEES]); + filterByAssignees([NO_ASSIGNEES]); - const expectedNumberOfAlerts = totalNumberOfAlerts - numberOfSelectedAlerts; - cy.get(ALERTS_COUNT).contains(expectedNumberOfAlerts); - }); + const expectedNumberOfAlerts = totalNumberOfAlerts - numberOfSelectedAlerts; + cy.get(ALERTS_COUNT).contains(expectedNumberOfAlerts); + }); - it('by one assignee', () => { - const numberOfSelectedAlerts = 2; - selectNumberOfAlerts(numberOfSelectedAlerts); - bulkUpdateAssignees([getDefaultUserName()]); + it('by one assignee', () => { + const numberOfSelectedAlerts = 2; + selectNumberOfAlerts(numberOfSelectedAlerts); + bulkUpdateAssignees([getDefaultUsername()]); - filterByAssignees([getDefaultUserName()]); + filterByAssignees([getDefaultUsername()]); - cy.get(ALERTS_COUNT).contains(numberOfSelectedAlerts); - }); + cy.get(ALERTS_COUNT).contains(numberOfSelectedAlerts); + }); - it('by assignee and alert status', () => { - const totalNumberOfAlerts = 5; - const numberOfAssignedAlerts = 3; - selectNumberOfAlerts(numberOfAssignedAlerts); - bulkUpdateAssignees([getDefaultUserName()]); + it('by assignee and alert status', () => { + const totalNumberOfAlerts = 5; + const numberOfAssignedAlerts = 3; + selectNumberOfAlerts(numberOfAssignedAlerts); + bulkUpdateAssignees([getDefaultUsername()]); - filterByAssignees([getDefaultUserName()]); + filterByAssignees([getDefaultUsername()]); - const numberOfClosedAlerts = 1; - selectNumberOfAlerts(numberOfClosedAlerts); - closeAlerts(); + const numberOfClosedAlerts = 1; + selectNumberOfAlerts(numberOfClosedAlerts); + closeAlerts(); - const expectedNumberOfAllerts1 = numberOfAssignedAlerts - numberOfClosedAlerts; - cy.get(ALERTS_COUNT).contains(expectedNumberOfAllerts1); + const expectedNumberOfAllerts1 = numberOfAssignedAlerts - numberOfClosedAlerts; + cy.get(ALERTS_COUNT).contains(expectedNumberOfAllerts1); - clearAssigneesFilter(); + clearAssigneesFilter(); - const expectedNumberOfAllerts2 = totalNumberOfAlerts - numberOfClosedAlerts; - cy.get(ALERTS_COUNT).contains(expectedNumberOfAllerts2); + const expectedNumberOfAllerts2 = totalNumberOfAlerts - numberOfClosedAlerts; + cy.get(ALERTS_COUNT).contains(expectedNumberOfAllerts2); - filterByAssignees([getDefaultUserName()]); - selectPageFilterValue(0, 'closed'); - cy.get(ALERTS_COUNT).contains(numberOfClosedAlerts); - }); + filterByAssignees([getDefaultUsername()]); + selectPageFilterValue(0, 'closed'); + cy.get(ALERTS_COUNT).contains(numberOfClosedAlerts); }); - } -); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows.cy.ts index 4f864c76069b2..6bf3ea611dc7f 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_engine/rule_creation/common_flows.cy.ts @@ -52,8 +52,7 @@ import { visit } from '../../../../tasks/navigation'; // in the creation form. For any rule type specific functionalities, please include // them in the relevant /rule_creation/[RULE_TYPE].cy.ts test. -// FLAKY: https://github.com/elastic/kibana/issues/183437 -describe.skip('Common rule creation flows', { tags: ['@ess', '@serverless'] }, () => { +describe('Common rule creation flows', { tags: ['@ess', '@serverless'] }, () => { beforeEach(() => { login(); deleteAlertsAndRules(); @@ -68,7 +67,9 @@ describe.skip('Common rule creation flows', { tags: ['@ess', '@serverless'] }, ( it('Creates and enables a rule', function () { cy.log('Filling define section'); importSavedQuery(this.timelineId); - // The following step is flaky due to a recent EUI upgrade. There is not currently a ticket for the underlying EUI issue, but when there is it will be linked on the test-failure ticket: https://github.com/elastic/kibana/issues/183437 + // The following step is flaky due to a recent EUI upgrade. + // Underlying EUI issue: https://github.com/elastic/eui/issues/7761 + // Issue to uncomment this once EUI fix is in place: https://github.com/elastic/kibana/issues/183485 // fillRelatedIntegrations(); cy.get(DEFINE_CONTINUE_BUTTON).click(); diff --git a/x-pack/test_serverless/functional/test_suites/common/discover/group5/_url_state.ts b/x-pack/test_serverless/functional/test_suites/common/discover/group5/_url_state.ts index 242dfedde74ef..76a8f479fa51c 100644 --- a/x-pack/test_serverless/functional/test_suites/common/discover/group5/_url_state.ts +++ b/x-pack/test_serverless/functional/test_suites/common/discover/group5/_url_state.ts @@ -90,7 +90,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { }); expect(await discoverLink?.getAttribute('href')).to.contain( '/app/discover#/?_g=(filters:!(),refreshInterval:(pause:!t,value:60000),time:(from:now-15m,to:now))' + - "&_a=(columns:!(),filters:!(),index:'logstash-*',interval:auto,query:(language:kuery,query:''),sort:!(!('@timestamp',desc)))" + "&_a=(columns:!(),dataSource:(dataViewId:'logstash-*',type:dataView),filters:!(),interval:auto,query:(language:kuery,query:''),sort:!(!('@timestamp',desc)))" ); await PageObjects.timePicker.setDefaultAbsoluteRange(); await filterBar.addFilter({ @@ -110,7 +110,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { 'query:(bool:(minimum_should_match:1,should:!((match_phrase:(extension.raw:jpg)),' + "(match_phrase:(extension.raw:css))))))),query:(language:kuery,query:'')," + "refreshInterval:(pause:!t,value:60000),time:(from:'2015-09-19T06:31:44.000Z'," + - "to:'2015-09-23T18:31:44.000Z'))&_a=(columns:!(),filters:!(),index:'logstash-*'," + + "to:'2015-09-23T18:31:44.000Z'))&_a=(columns:!(),dataSource:(dataViewId:'logstash-*',type:dataView),filters:!()," + "interval:auto,query:(language:kuery,query:''),sort:!(!('@timestamp',desc)))" ); await PageObjects.svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'discover' }); diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_flyout.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_flyout.ts index cee810ad12356..9688c177c2e73 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_flyout.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_flyout.ts @@ -31,7 +31,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const to = '2024-01-01T12:00:00.000Z'; const excludeKeysFromServerless = ['size']; // https://github.com/elastic/kibana/issues/178954 - describe('Dataset quality flyout', () => { + describe('Dataset quality flyout', function () { + this.tags(['failsOnMKI']); // Failing https://github.com/elastic/kibana/issues/183495 + before(async () => { await PageObjects.svlCommonPage.loginWithRole('admin'); await synthtrace.index(getInitialTestLogs({ to, count: 4 })); diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table.ts index 096045db79ea7..6180a7286d3d5 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table.ts @@ -23,7 +23,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const retry = getService('retry'); const to = '2024-01-01T12:00:00.000Z'; - describe('Dataset quality table', () => { + describe('Dataset quality table', function () { + this.tags(['failsOnMKI']); // Failing https://github.com/elastic/kibana/issues/183495 + before(async () => { await synthtrace.index(getInitialTestLogs({ to, count: 4 })); await PageObjects.svlCommonPage.loginWithRole('admin'); diff --git a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table_filters.ts b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table_filters.ts index f0832846e546f..c64eb37630ff9 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table_filters.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/dataset_quality/dataset_quality_table_filters.ts @@ -21,7 +21,9 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const to = '2024-01-01T12:00:00.000Z'; - describe('Dataset quality table filters', () => { + describe('Dataset quality table filters', function () { + this.tags(['failsOnMKI']); // Failing https://github.com/elastic/kibana/issues/183495 + before(async () => { await synthtrace.index(getInitialTestLogs({ to, count: 4 })); await PageObjects.svlCommonPage.loginWithRole('admin'); diff --git a/x-pack/test_serverless/functional/test_suites/observability/navigation.ts b/x-pack/test_serverless/functional/test_suites/observability/navigation.ts index eb2597f38db20..24287170b83a6 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/navigation.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/navigation.ts @@ -51,8 +51,8 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { // check the aiops subsection await svlCommonNavigation.sidenav.openSection('observability_project_nav.aiops'); // open ai ops subsection - await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'ml:anomalyDetection' }); - await svlCommonNavigation.sidenav.expectLinkActive({ deepLinkId: 'ml:anomalyDetection' }); + await svlCommonNavigation.sidenav.clickLink({ navId: 'ml:anomalyDetection' }); + await svlCommonNavigation.sidenav.expectLinkActive({ navId: 'ml:anomalyDetection' }); await svlCommonNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'AIOps' }); await svlCommonNavigation.breadcrumbs.expectBreadcrumbExists({ deepLinkId: 'ml:anomalyDetection', diff --git a/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/columns_selection.ts b/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/columns_selection.ts index beb1adc25e70c..d32f3aff208b0 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/columns_selection.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/observability_logs_explorer/columns_selection.ts @@ -132,9 +132,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { expect(cellValue.includes('error.message')).to.be(false); expect(cellValue.includes('event.original')).to.be(false); - const cellAttribute = await cellElement.findByTestSubject( - 'logsExplorerCellDescriptionList' - ); + const cellAttribute = await cellElement.findByTestSubject('discoverCellDescriptionList'); expect(cellAttribute).not.to.be.empty(); }); }); diff --git a/yarn.lock b/yarn.lock index efc5192e28f3d..e35fbacacef73 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11383,7 +11383,7 @@ resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -abab@^2.0.4, abab@^2.0.6: +abab@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== @@ -12111,6 +12111,13 @@ ast-types@^0.14.2: dependencies: tslib "^2.0.1" +ast-types@^0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.16.1.tgz#7a9da1617c9081bc121faafe91711b4c8bb81da2" + integrity sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg== + dependencies: + tslib "^2.0.1" + ast-types@^0.7.0: version "0.7.8" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.7.8.tgz#902d2e0d60d071bdcd46dc115e1809ed11c138a9" @@ -13568,10 +13575,10 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -chromedriver@^123.0.3: - version "123.0.3" - resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-123.0.3.tgz#40f9223373cbdf8f849e118507b24b0de8ecb21a" - integrity sha512-35IeTqDLcVR0htF9nD/Lh+g24EG088WHVKXBXiFyWq+2lelnoM0B3tKTBiUEjLng0GnELI4QyQPFK7i97Fz1fQ== +chromedriver@^124.0.3: + version "124.0.3" + resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-124.0.3.tgz#2818408353ee97005acb887d9f488fe34d5c6d10" + integrity sha512-k6Xu9fwDMgi//bGHB944QMmDHF0BBWGk4PAyVZBEuP6wnZMfQP4V6Sv+l/nuAPA006RllS6X07ZpjPwRPS4BaA== dependencies: "@testim/chrome-version" "^1.1.4" axios "^1.6.7" @@ -16798,7 +16805,7 @@ espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@^4.0.0, esprima@^4.0.1: +esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -26468,6 +26475,17 @@ real-require@^0.2.0: resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== +recast@^0.23.7: + version "0.23.7" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.7.tgz#1e08f164e10402b075c904a2b01022b3da039c72" + integrity sha512-MpQlLZVpqbbxYcqEjwpRWo88sGvjOYoXptySz710RuddNMHx+wPkoNX6YyLZJlXAh5VZr1qmPrTwcTuFMh0Lag== + dependencies: + ast-types "^0.16.1" + esprima "~4.0.0" + source-map "~0.6.1" + tiny-invariant "^1.3.3" + tslib "^2.0.1" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -28727,7 +28745,7 @@ string-replace-loader@^2.2.0: loader-utils "^1.2.3" schema-utils "^1.0.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -28745,6 +28763,15 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -28854,7 +28881,7 @@ stringify-object@^3.2.1: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -28868,6 +28895,13 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -29574,7 +29608,7 @@ tiny-inflate@^1.0.0, tiny-inflate@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== -tiny-invariant@^1.0.2, tiny-invariant@^1.0.6: +tiny-invariant@^1.0.2, tiny-invariant@^1.0.6, tiny-invariant@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== @@ -31741,7 +31775,7 @@ workerpool@6.2.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -31767,6 +31801,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"